#!/bin/bash
# cleanup-uuid-migration.sh
# Script de nettoyage des fichiers legacy de la migration UUID
# À exécuter depuis la racine du monorepo

set -e  # Stop on error

echo "=========================================="
echo "🧹 Nettoyage Migration UUID - Veza"
echo "=========================================="
echo ""

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

# Fonction pour afficher les erreurs
error() {
    echo -e "${RED}❌ $1${NC}" >&2
}

success() {
    echo -e "${GREEN}✅ $1${NC}"
}

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

info() {
    echo -e "ℹ️  $1"
}

# Vérifier qu'on est à la racine du monorepo
if [ ! -d "veza-backend-api" ] || [ ! -d "veza-chat-server" ]; then
    error "Ce script doit être exécuté depuis la racine du monorepo"
    exit 1
fi

echo "=== Étape 1: Vérification pré-cleanup ==="
echo ""

# Vérifier qu'on est sur la bonne branche
CURRENT_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
if [ "$CURRENT_BRANCH" = "unknown" ] || [ -z "$CURRENT_BRANCH" ]; then
    warning "Git n'est pas initialisé ou vous n'êtes pas dans un repo git"
    read -p "Continuer quand même ? (y/N) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
else
    info "Branche actuelle : $CURRENT_BRANCH"
    
    if [ "$CURRENT_BRANCH" != "cleanup/uuid-migration" ] && [ "$CURRENT_BRANCH" != "cleanup/uuid-cleanup" ]; then
        warning "Vous n'êtes pas sur une branche cleanup/uuid-*"
        read -p "Créer une branche cleanup/uuid-cleanup ? (y/N) " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            git checkout -b cleanup/uuid-cleanup
            success "Branche cleanup/uuid-cleanup créée"
        fi
    fi
fi

# Vérifier que les tests passent (optionnel, peut être long)
read -p "Voulez-vous lancer les tests avant le nettoyage ? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    info "🧪 Vérification des tests backend..."
    cd veza-backend-api
    if go test ./... -v 2>&1 | head -20; then
        success "Tests backend OK"
    else
        error "Tests backend échoués"
        cd ..
        read -p "Continuer quand même ? (y/N) " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
    cd ..
    
    info "🧪 Vérification des tests chat-server..."
    cd veza-chat-server
    if cargo test 2>&1 | head -30; then
        success "Tests chat-server OK"
    else
        error "Tests chat-server échoués"
        cd ..
        read -p "Continuer quand même ? (y/N) " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
    cd ..
else
    warning "Tests ignorés - assurez-vous qu'ils passent avant de continuer"
fi

echo ""
echo "=== Étape 2: Backup ==="
echo ""

BACKUP_DIR="backup-pre-cleanup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
info "📦 Création du backup dans $BACKUP_DIR..."

# Backup migrations_legacy
if [ -d "veza-backend-api/migrations_legacy" ]; then
    tar -czf "$BACKUP_DIR/migrations_legacy.tar.gz" veza-backend-api/migrations_legacy/ 2>/dev/null
    if [ $? -eq 0 ]; then
        success "migrations_legacy/ sauvegardé"
    else
        error "Échec du backup de migrations_legacy/"
        exit 1
    fi
else
    warning "migrations_legacy/ n'existe pas (déjà supprimé ?)"
fi

# Backup main.go.legacy
if [ -f "veza-backend-api/cmd/main.go.legacy" ]; then
    cp veza-backend-api/cmd/main.go.legacy "$BACKUP_DIR/" 2>/dev/null
    if [ $? -eq 0 ]; then
        success "main.go.legacy sauvegardé"
    else
        warning "Échec du backup de main.go.legacy (non critique)"
    fi
else
    info "main.go.legacy n'existe pas (déjà supprimé ?)"
fi

# Créer un fichier README dans le backup
cat > "$BACKUP_DIR/README.txt" << EOF
Backup créé le $(date)
Contenu :
- migrations_legacy.tar.gz : Dossier complet des migrations legacy
- main.go.legacy : Ancien point d'entrée (si présent)

Ce backup peut être supprimé après vérification que le nettoyage fonctionne correctement.
EOF

success "Backup créé dans $BACKUP_DIR"

echo ""
echo "=== Étape 3: Suppressions ==="
echo ""

# Supprimer migrations_legacy
if [ -d "veza-backend-api/migrations_legacy" ]; then
    info "🗑️  Suppression de veza-backend-api/migrations_legacy/..."
    rm -rf veza-backend-api/migrations_legacy/
    success "migrations_legacy/ supprimé"
else
    info "migrations_legacy/ n'existe pas (déjà supprimé ?)"
fi

# Supprimer main.go.legacy
if [ -f "veza-backend-api/cmd/main.go.legacy" ]; then
    info "🗑️  Suppression de veza-backend-api/cmd/main.go.legacy..."
    rm veza-backend-api/cmd/main.go.legacy
    success "main.go.legacy supprimé"
else
    info "main.go.legacy n'existe pas (déjà supprimé ?)"
fi

# Vérifier archive du chat-server
if [ -d "veza-chat-server/migrations/archive" ]; then
    warning "veza-chat-server/migrations/archive/ existe"
    info "Ce dossier contient des migrations archivées"
    read -p "Voulez-vous le supprimer ? (y/N) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        rm -rf veza-chat-server/migrations/archive/
        success "archive/ supprimé"
    else
        info "archive/ conservé"
    fi
fi

echo ""
echo "=== Étape 4: Vérification post-cleanup ==="
echo ""

# Build backend
info "🔨 Build backend..."
cd veza-backend-api
if go build ./cmd/api 2>&1 | head -10; then
    success "Build backend OK"
else
    error "Build backend échoué"
    cd ..
    exit 1
fi
cd ..

# Build chat-server
info "🔨 Build chat-server..."
cd veza-chat-server
if cargo build --release 2>&1 | tail -5; then
    success "Build chat-server OK"
else
    error "Build chat-server échoué"
    cd ..
    exit 1
fi
cd ..

# Tests (optionnel)
read -p "Voulez-vous lancer les tests après le nettoyage ? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    info "🧪 Tests backend..."
    cd veza-backend-api
    if go test ./... -v 2>&1 | head -20; then
        success "Tests backend OK"
    else
        error "Tests backend échoués"
        cd ..
        exit 1
    fi
    cd ..
    
    info "🧪 Tests chat-server..."
    cd veza-chat-server
    if cargo test 2>&1 | tail -10; then
        success "Tests chat-server OK"
    else
        error "Tests chat-server échoués"
        cd ..
        exit 1
    fi
    cd ..
else
    warning "Tests ignorés - assurez-vous de les lancer manuellement"
fi

echo ""
echo "=========================================="
echo -e "${GREEN}✅ Cleanup terminé${NC}"
echo "=========================================="
echo ""
echo "📊 Résumé :"
echo "  - Backup créé dans : $BACKUP_DIR"
echo "  - migrations_legacy/ : Supprimé"
echo "  - main.go.legacy : Supprimé"
echo ""
echo "📝 Prochaines étapes :"
echo "  1. Review les changements : git diff"
echo "  2. Commit : git commit -m 'chore: remove legacy UUID migration files'"
echo "  3. Push : git push origin $CURRENT_BRANCH"
echo ""
echo "💡 Pour restaurer le backup :"
echo "   tar -xzf $BACKUP_DIR/migrations_legacy.tar.gz"
echo ""

