#!/bin/bash

# Fichier de sortie
OUT="RAPPORT_USAGE_CODE_MORT.md"

echo "# 💀 Audit de Code Mort & Usage" > "$OUT"
echo "Analyse basée sur la recherche textuelle exacte des noms de fonctions." >> "$OUT"
echo "" >> "$OUT"
echo "| Fichier | Ligne | Fonction | État | Occurrences | Note |" >> "$OUT"
echo "|---|---|---|---|---|---|" >> "$OUT"

# Compteurs
dead_count=0
alive_count=0

# On boucle sur toutes les lignes contenant "function ..."
# On exclut les commentaires
grep -r -n "^\s*function" --include="*.jl" . | grep -v "#" | while read -r line ; do

    # 1. Extraction des métadonnées
    file=$(echo "$line" | cut -d: -f1)
    lineno=$(echo "$line" | cut -d: -f2)
    
    # Extraction propre du nom de la fonction (entre "function" et "(")
    # Ex: "function solve_poisson!(...)" -> "solve_poisson!"
    func_name=$(echo "$line" | sed -E 's/.*function\s+([a-zA-Z0-9_!]+).*/\1/')
    
    # Sécurité: ignorer si le nom est vide ou bizarre
    if [[ -z "$func_name" || "$func_name" == *"function"* ]]; then
        continue
    fi

    # 2. Comptage des occurrences (Recherche mot entier -w)
    # On cherche dans tout le dossier courant (.)
    count=$(grep -r -w --include="*.jl" "$func_name" . | wc -l)

    # 3. Classification
    status=""
    note=""
    
    if [ "$count" -eq 1 ]; then
        # Si count == 1, c'est que le mot n'apparait QUE dans sa définition -> Code Mort
        status="💀 MORT"
        ((dead_count++))
    else
        # Si count > 1, elle est appelée quelque part
        status="✅ ACTIF"
        ((alive_count++))
        
        # Petit bonus : on vérifie si c'est un test ou un exemple qui l'appelle
        if grep -q "test/" <<< "$file"; then
             note="Test"
        elif grep -q "examples/" <<< "$file"; then
             note="Exemple"
        fi
    fi

    # 4. Écriture dans le rapport (Format Markdown)
    # On met en gras les fonctions mortes pour qu'elles sautent aux yeux
    if [ "$status" == "💀 MORT" ]; then
        echo "| \`$file\` | $lineno | **$func_name** | $status | $count | $note |" >> "$OUT"
    else
        echo "| \`$file\` | $lineno | \`$func_name\` | $status | $count | $note |" >> "$OUT"
    fi

    # Feedback visuel dans le terminal (optionnel)
    # echo -ne "Scanned: $func_name ($count)\r"

done

# Résumé à la fin
echo "" >> "$OUT"
echo "## 📊 Statistiques" >> "$OUT"
echo "- Fonctions Actives : $alive_count" >> "$OUT"
echo "- Fonctions Mortes (candidates) : $dead_count" >> "$OUT"
echo "- **Total analysé : $((alive_count + dead_count))**" >> "$OUT"

echo "✅ Audit terminé. Résultats dans : $OUT"
echo "    -> Actives : $alive_count"
echo "    -> Mortes  : $dead_count"