#!/bin/bash

# Script de génération du rapport hebdomadaire
# Génère automatiquement un rapport de progression pour la semaine

set -e

# Configuration
REPORTS_DIR="REPORTS"
TEMPLATE_DIR="templates"
CURRENT_WEEK=$(date +%Y-W%U)
CURRENT_DATE=$(date +%Y-%m-%d)

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

echo -e "${CYAN}📊 Génération du rapport hebdomadaire pour la semaine ${CURRENT_WEEK}${NC}"

# Créer le répertoire des rapports s'il n'existe pas
mkdir -p "$REPORTS_DIR"

# Nom du fichier de rapport
REPORT_FILE="$REPORTS_DIR/weekly_${CURRENT_WEEK}.md"

# Fonction pour compter les tâches dans CURSOR_TODO.md
count_tasks() {
    local section="$1"
    local file="CURSOR_TODO.md"
    
    if [ ! -f "$file" ]; then
        echo "0"
        return
    fi
    
    case "$section" in
        "done")
            grep -c "^- \[x\]" "$file" || echo "0"
            ;;
        "in_progress")
            grep -c "^- \[ \].*NOW\|En cours" "$file" || echo "0"
            ;;
        "blocked")
            grep -c "BLOCKED\|Bloqué" "$file" || echo "0"
            ;;
        "total")
            grep -c "^- \[" "$file" || echo "0"
            ;;
        *)
            echo "0"
            ;;
    esac
}

# Fonction pour obtenir les métriques du projet
get_project_metrics() {
    echo "## 📊 Métriques du Projet"
    echo ""
    echo "### Code"
    echo "- **Lignes de code** : $(find . -name '*.go' -o -name '*.rs' -o -name '*.ts' -o -name '*.tsx' | xargs wc -l | tail -1 | awk '{print $1}')"
    echo "- **Fichiers Go** : $(find . -name '*.go' | wc -l)"
    echo "- **Fichiers Rust** : $(find . -name '*.rs' | wc -l)"
    echo "- **Fichiers TypeScript** : $(find . -name '*.ts' -o -name '*.tsx' | wc -l)"
    echo "- **Fichiers Markdown** : $(find . -name '*.md' | wc -l)"
    echo ""
    echo "### Tests"
    if [ -f "veza-backend-api/coverage.out" ]; then
        echo "- **Couverture Backend** : $(go tool cover -func=veza-backend-api/coverage.out | tail -1 | awk '{print $3}')"
    else
        echo "- **Couverture Backend** : Non disponible"
    fi
    echo ""
    echo "### Dépendances"
    echo "- **Modules Go** : $(find . -name 'go.mod' | wc -l)"
    echo "- **Crates Rust** : $(find . -name 'Cargo.toml' | wc -l)"
    echo "- **Packages Node** : $(find . -name 'package.json' | wc -l)"
    echo ""
}

# Fonction pour obtenir les commits de la semaine
get_weekly_commits() {
    echo "## 📝 Commits de la Semaine"
    echo ""
    echo "### Derniers commits"
    echo '```bash'
    git log --oneline --since="1 week ago" --pretty=format:"%h %ad %s" --date=short | head -10
    echo '```'
    echo ""
    echo "### Statistiques des commits"
    echo "- **Total commits** : $(git log --since="1 week ago" --oneline | wc -l)"
    echo "- **Auteurs** : $(git log --since="1 week ago" --pretty=format:"%an" | sort -u | wc -l)"
    echo "- **Fichiers modifiés** : $(git diff --name-only HEAD~7 HEAD | wc -l)"
    echo ""
}

# Fonction pour obtenir les métriques des agents
get_agents_metrics() {
    echo "## 🤖 Métriques des Agents IA"
    echo ""
    echo "### Statut des Agents"
    for agent in planner researcher implementer qa docs maintainer; do
        if [ -f ".cursor/agents/$agent/status.txt" ]; then
            status=$(cat ".cursor/agents/$agent/status.txt")
            echo "- **$agent** : $status"
        else
            echo "- **$agent** : Non actif"
        fi
    done
    echo ""
}

# Générer le rapport
{
    echo "# 📊 Rapport Hebdomadaire - Semaine ${CURRENT_WEEK}"
    echo ""
    echo "**Période** : $(date -d 'monday' +%Y-%m-%d) - $(date -d 'sunday' +%Y-%m-%d)"
    echo "**Généré le** : ${CURRENT_DATE}"
    echo "**Généré par** : Script automatique"
    echo ""
    
    echo "## 🎯 Vue d'Ensemble"
    echo ""
    local total_tasks=$(count_tasks "total")
    local done_tasks=$(count_tasks "done")
    local in_progress_tasks=$(count_tasks "in_progress")
    local blocked_tasks=$(count_tasks "blocked")
    
    echo "### Métriques Clés"
    echo "- **Tâches Total** : ${total_tasks}"
    echo "- **Tâches Terminées** : ${done_tasks} ($(( done_tasks * 100 / total_tasks ))%)"
    echo "- **Tâches En Cours** : ${in_progress_tasks}"
    echo "- **Tâches Bloquées** : ${blocked_tasks}"
    echo ""
    
    if [ $done_tasks -gt 0 ]; then
        echo "### Tâches Terminées Cette Semaine"
        echo ""
        # Extraire les tâches terminées de cette semaine
        grep -A 1 "✅ 2024-" CURSOR_TODO.md | grep -v "✅ 2024-" | head -10 | while read -r line; do
            if [ -n "$line" ]; then
                echo "- $line"
            fi
        done
        echo ""
    fi
    
    if [ $in_progress_tasks -gt 0 ]; then
        echo "### Tâches En Cours"
        echo ""
        grep -A 1 "NOW\|En cours" CURSOR_TODO.md | grep -v "NOW\|En cours" | head -5 | while read -r line; do
            if [ -n "$line" ]; then
                echo "- $line"
            fi
        done
        echo ""
    fi
    
    if [ $blocked_tasks -gt 0 ]; then
        echo "### Tâches Bloquées"
        echo ""
        grep -A 1 "BLOCKED\|Bloqué" CURSOR_TODO.md | grep -v "BLOCKED\|Bloqué" | head -5 | while read -r line; do
            if [ -n "$line" ]; then
                echo "- $line"
            fi
        done
        echo ""
    fi
    
    get_project_metrics
    get_weekly_commits
    get_agents_metrics
    
    echo "## 🎯 Objectifs Semaine Prochaine"
    echo ""
    echo "### Priorité 1 (P0)"
    echo "- [ ] Stabiliser WebSocket chat"
    echo "- [ ] Implémenter OAuth2 Google"
    echo "- [ ] Ajouter tests E2E"
    echo ""
    echo "### Priorité 2 (P1)"
    echo "- [ ] Implémenter OAuth2 GitHub"
    echo "- [ ] Optimiser performance streaming"
    echo "- [ ] Améliorer monitoring"
    echo ""
    echo "### Priorité 3 (P2)"
    echo "- [ ] Documenter API"
    echo "- [ ] Sécuriser communications"
    echo "- [ ] Améliorer UI/UX"
    echo ""
    
    echo "## 📈 Tendances"
    echo ""
    echo "### Progression"
    echo "- **Vélocité** : $done_tasks tâches/semaine"
    echo "- **Efficacité** : $(( done_tasks * 100 / (done_tasks + in_progress_tasks) ))%"
    echo "- **Blocages** : $(( blocked_tasks * 100 / total_tasks ))%"
    echo ""
    
    echo "## 🚨 Alertes"
    echo ""
    if [ $blocked_tasks -gt 2 ]; then
        echo "⚠️ **Trop de tâches bloquées** : $blocked_tasks tâches en attente"
    fi
    
    if [ $in_progress_tasks -gt 5 ]; then
        echo "⚠️ **Trop de tâches en cours** : $in_progress_tasks tâches simultanées"
    fi
    
    if [ $done_tasks -lt 3 ]; then
        echo "⚠️ **Faible vélocité** : Seulement $done_tasks tâches terminées"
    fi
    
    if [ $blocked_tasks -eq 0 ] && [ $in_progress_tasks -le 3 ] && [ $done_tasks -ge 5 ]; then
        echo "✅ **Excellent rythme** : Progression constante et efficace"
    fi
    echo ""
    
    echo "## 📝 Notes"
    echo ""
    echo "### Succès de la Semaine"
    echo "- Documentation dual-track opérationnelle"
    echo "- Environnement de développement assisté par IA configuré"
    echo "- Pipeline CI/CD complet mis en place"
    echo "- Système ADR et agents IA opérationnels"
    echo ""
    
    echo "### Défis Identifiés"
    echo "- WebSocket chat nécessite stabilisation"
    echo "- OAuth2 en cours d'implémentation"
    echo "- Tests E2E à ajouter"
    echo ""
    
    echo "### Actions Correctives"
    echo "1. **Prioriser WebSocket** : Tests et debugging intensifs"
    echo "2. **Accélérer OAuth2** : Focus sur Google et GitHub"
    echo "3. **Ajouter tests** : Playwright pour E2E"
    echo "4. **Monitoring** : Alertes proactives"
    echo ""
    
    echo "---"
    echo ""
    echo "*Rapport généré automatiquement le ${CURRENT_DATE}*"
    echo "*Prochain rapport : $(date -d '+1 week' +%Y-%m-%d)*"
    
} > "$REPORT_FILE"

echo -e "${GREEN}✅ Rapport hebdomadaire généré : ${REPORT_FILE}${NC}"

# Afficher un résumé
echo -e "${BLUE}📋 Résumé du rapport :${NC}"
echo "- Tâches totales : $total_tasks"
echo "- Tâches terminées : $done_tasks"
echo "- Tâches en cours : $in_progress_tasks"
echo "- Tâches bloquées : $blocked_tasks"
echo "- Commits cette semaine : $(git log --since="1 week ago" --oneline | wc -l)"

# Optionnel : ouvrir le rapport
if command -v code &> /dev/null; then
    echo -e "${YELLOW}📖 Ouverture du rapport dans VSCode...${NC}"
    code "$REPORT_FILE"
fi

echo -e "${GREEN}🎉 Génération du rapport terminée !${NC}"
