#!/bin/bash

#############################################################################
# Script de création de package - Formation Manager Itinova
# Version: 2.0
# 
# Ce script crée un package tar.gz prêt pour le déploiement incluant:
# - Le code compilé
# - Les dépendances
# - Les migrations SQL
# - Les scripts de déploiement
# - La documentation
#############################################################################

set -e  # Arrêter en cas d'erreur

# Couleurs
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'

# Configuration
PROJECT_DIR="/home/ubuntu/formation-manager-itinova"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
PACKAGE_NAME="formation-manager-itinova-${TIMESTAMP}.tar.gz"
TEMP_DIR=$(mktemp -d)

echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}  Création du package de déploiement${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""

# 1. Vérifier que nous sommes dans le bon répertoire
echo -e "${BLUE}[1/8]${NC} Vérification du répertoire..."
cd "$PROJECT_DIR"
if [ ! -f "package.json" ]; then
    echo -e "${YELLOW}Erreur: package.json non trouvé${NC}"
    exit 1
fi
echo -e "${GREEN}✓${NC} Répertoire vérifié"

# 2. Compiler le projet
echo -e "${BLUE}[2/8]${NC} Compilation du projet..."
if command -v pnpm &> /dev/null; then
    pnpm build
else
    npm run build
fi
echo -e "${GREEN}✓${NC} Projet compilé"

# 3. Créer la structure dans le répertoire temporaire
echo -e "${BLUE}[3/8]${NC} Préparation de la structure..."
mkdir -p "$TEMP_DIR"/{dist,migrations,scripts,node_modules}
echo -e "${GREEN}✓${NC} Structure créée"

# 4. Copier les fichiers nécessaires
echo -e "${BLUE}[4/8]${NC} Copie des fichiers..."

# Code compilé
cp -r dist/* "$TEMP_DIR/dist/"

# Migrations SQL
if [ -d "migrations" ]; then
    cp -r migrations/* "$TEMP_DIR/migrations/" 2>/dev/null || true
fi

# Scripts de déploiement
cp scripts/update-production.sh "$TEMP_DIR/scripts/"
chmod +x "$TEMP_DIR/scripts/update-production.sh"

# Fichiers de configuration
cp package.json "$TEMP_DIR/"
cp pnpm-lock.yaml "$TEMP_DIR/" 2>/dev/null || cp package-lock.json "$TEMP_DIR/" 2>/dev/null || true

# Fichier .env.example (pas le .env réel pour la sécurité)
if [ -f ".env.example" ]; then
    cp .env.example "$TEMP_DIR/"
elif [ -f ".env" ]; then
    # Créer un .env.example depuis .env en masquant les valeurs sensibles
    sed 's/=.*/=/' .env > "$TEMP_DIR/.env.example"
fi

# Documentation
if [ -f "README.md" ]; then
    cp README.md "$TEMP_DIR/"
fi

echo -e "${GREEN}✓${NC} Fichiers copiés"

# 5. Installer les dépendances de production
echo -e "${BLUE}[5/8]${NC} Installation des dépendances de production..."
cd "$TEMP_DIR"
if command -v pnpm &> /dev/null; then
    pnpm install --prod --frozen-lockfile 2>/dev/null || pnpm install --prod
else
    npm install --production
fi
echo -e "${GREEN}✓${NC} Dépendances installées"

# 6. Créer un fichier VERSION
echo -e "${BLUE}[6/8]${NC} Création du fichier VERSION..."
cat > "$TEMP_DIR/VERSION" << EOF
Version: ${TIMESTAMP}
Date: $(date '+%Y-%m-%d %H:%M:%S')
Git commit: $(cd "$PROJECT_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "N/A")
EOF
echo -e "${GREEN}✓${NC} Fichier VERSION créé"

# 7. Créer le package tar.gz
echo -e "${BLUE}[7/8]${NC} Création de l'archive..."
cd "$TEMP_DIR"
tar -czf "$PROJECT_DIR/$PACKAGE_NAME" .
echo -e "${GREEN}✓${NC} Archive créée"

# 8. Nettoyer
echo -e "${BLUE}[8/8]${NC} Nettoyage..."
rm -rf "$TEMP_DIR"
echo -e "${GREEN}✓${NC} Nettoyage terminé"

# Afficher les informations du package
echo ""
echo -e "${GREEN}=========================================${NC}"
echo -e "${GREEN}  Package créé avec succès !${NC}"
echo -e "${GREEN}=========================================${NC}"
echo ""
echo -e "Nom du fichier: ${BLUE}$PACKAGE_NAME${NC}"
echo -e "Emplacement: ${BLUE}$PROJECT_DIR/$PACKAGE_NAME${NC}"
echo -e "Taille: ${BLUE}$(du -h "$PROJECT_DIR/$PACKAGE_NAME" | cut -f1)${NC}"
echo ""
echo -e "${YELLOW}Contenu du package:${NC}"
tar -tzf "$PROJECT_DIR/$PACKAGE_NAME" | head -20
echo ""
echo -e "${YELLOW}Instructions de déploiement:${NC}"
echo -e "1. Transférer le package sur le serveur:"
echo -e "   ${BLUE}scp $PACKAGE_NAME user@serveur:/tmp/${NC}"
echo ""
echo -e "2. Se connecter au serveur et exécuter:"
echo -e "   ${BLUE}cd /var/www/formation-manager-itinova${NC}"
echo -e "   ${BLUE}./scripts/update-production.sh /tmp/$PACKAGE_NAME${NC}"
echo ""
