#!/bin/bash

# Script de nettoyage du code Go
# Ce script nettoie les imports non utilisés, formate le code et vérifie la qualité

set -e

echo "🧹 Nettoyage du code Go..."

# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Fonction pour afficher les messages colorés
print_status() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# Vérifier que nous sommes dans le bon répertoire
if [ ! -f "go.mod" ]; then
    print_error "go.mod non trouvé. Exécutez ce script depuis la racine du projet."
    exit 1
fi

# 1. Nettoyer les imports non utilisés
print_status "Nettoyage des imports non utilisés..."
if command -v goimports &> /dev/null; then
    find . -name "*.go" -not -path "./vendor/*" -not -path "./.git/*" | xargs goimports -w
    print_status "Imports nettoyés avec goimports"
else
    print_warning "goimports non installé. Installation..."
    go install golang.org/x/tools/cmd/goimports@latest
    find . -name "*.go" -not -path "./vendor/*" -not -path "./.git/*" | xargs goimports -w
    print_status "Imports nettoyés avec goimports"
fi

# 2. Formater le code
print_status "Formatage du code..."
go fmt ./...
print_status "Code formaté"

# 3. Vérifier avec go vet
print_status "Vérification avec go vet..."
if go vet ./...; then
    print_status "go vet: Aucun problème détecté"
else
    print_warning "go vet: Problèmes détectés"
fi

# 4. Vérifier les modules
print_status "Vérification des modules..."
go mod tidy
print_status "Modules nettoyés"

# 5. Vérifier les dépendances
print_status "Vérification des dépendances..."
go mod verify
print_status "Dépendances vérifiées"

# 6. Compiler le projet
print_status "Compilation du projet..."
if go build ./...; then
    print_status "Compilation réussie"
else
    print_error "Erreurs de compilation détectées"
    exit 1
fi

# 7. Exécuter les tests
print_status "Exécution des tests..."
if go test ./... -v; then
    print_status "Tous les tests passent"
else
    print_warning "Certains tests échouent"
fi

# 8. Résumé
echo ""
echo "🎉 Nettoyage terminé !"
echo ""
echo "📊 Résumé:"
echo "  - Imports nettoyés"
echo "  - Code formaté"
echo "  - Modules vérifiés"
echo "  - Tests exécutés"
echo ""
echo "✨ Votre code Go est maintenant propre et optimisé !"