#!/bin/bash

# ============================================
# Script d'installation automatique du portfolio Geekbrain.io
# À exécuter SUR LE NAS dans le dossier du projet
# ============================================

set -e  # Arrête le script en cas d'erreur

echo "=========================================="
echo "Installation du portfolio Geekbrain.io"
echo "=========================================="
echo ""

# Couleurs pour l'affichage
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# Vérifier que Docker est installé et en cours d'exécution
echo "1. Vérification de Docker..."
if ! command -v docker &> /dev/null; then
    echo -e "${RED}❌ Docker n'est pas installé. Installez Docker d'abord.${NC}"
    exit 1
fi

if ! docker info &> /dev/null; then
    echo -e "${RED}❌ Docker n'est pas en cours d'exécution ou vous n'avez pas les permissions.${NC}"
    echo "   Démarrez Docker : systemctl start docker (ou via l'interface de votre NAS)"
    exit 1
fi

echo -e "${GREEN}✓ Docker est opérationnel${NC}"
echo ""

# Vérifier que le docker-compose.yml existe
if [ ! -f "docker/docker-compose.yml" ]; then
    echo -e "${RED}❌ Fichier docker/docker-compose.yml introuvable.${NC}"
    echo "   Assurez-vous d'exécuter ce script depuis la racine du projet."
    exit 1
fi

echo "2. Configuration de l'environnement..."
echo ""

# Vérifier si .env existe déjà
if [ -f ".env" ]; then
    read -p "Un fichier .env existe déjà. Le remplacer ? (o/N) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Oo]$ ]]; then
        echo "Installation annulée. Conservez votre fichier .env existant."
        exit 0
    fi
fi

# Créer le fichier .env
ENV_FILE=".env"

# === Demander les valeurs ===

echo "Veuillez renseigner les variables d'environnement :"
echo ""

# DATABASE_URL
read -p "DATABASE_URL (ex: mysql+aiomysql://geekbrain_app:2025Supp@rt2026@10.0.0.16:3306/geekbrain_portfolio) : " DATABASE_URL

# SMTP
read -p "SMTP_HOST (ex: smtp.gmail.com) : " SMTP_HOST
read -p "SMTP_PORT (ex: 587) : " SMTP_PORT
read -p "SMTP_USER (ex: rcairbum@gmail.com) : " SMTP_USER
read -s -p "SMTP_PASSWORD (mot de passe d'application Gmail) : " SMTP_PASSWORD
echo ""

# reCAPTCHA
read -p "RECAPTCHA_SITE_KEY (depuis Google) : " RECAPTCHA_SITE_KEY
read -s -p "RECAPTCHA_SECRET (depuis Google) : " RECAPTCHA_SECRET
echo ""

# GitBucket
read -p "GITBUCKET_URL (ex: http://10.0.0.16:8080/api/v3/users/rcairbum/repos) : " GITBUCKET_URL

# Optionnels avec défauts
read -p "CACHE_TTL en secondes (défaut: 300) : " CACHE_TTL
CACHE_TTL=${CACHE_TTL:-300}

read -p "LOG_LEVEL (défaut: INFO) : " LOG_LEVEL
LOG_LEVEL=${LOG_LEVEL:-INFO}

echo ""
echo "3. Création du fichier .env..."

# Écrire le fichier .env
cat > "$ENV_FILE" << EOF
# Configuration de l'application Geekbrain.io
# Généré automatiquement le $(date)

DATABASE_URL=$DATABASE_URL
SMTP_HOST=$SMTP_HOST
SMTP_PORT=$SMTP_PORT
SMTP_USER=$SMTP_USER
SMTP_PASSWORD=$SMTP_PASSWORD
RECAPTCHA_SITE_KEY=$RECAPTCHA_SITE_KEY
RECAPTCHA_SECRET=$RECAPTCHA_SECRET
GITBUCKET_URL=$GITBUCKET_URL
CACHE_TTL=$CACHE_TTL
LOG_LEVEL=$LOG_LEVEL
EOF

echo -e "${GREEN}✓ Fichier .env créé${NC}"
echo ""

# Vérifier que le fichier a été créé
if [ ! -f "$ENV_FILE" ]; then
    echo -e "${RED}❌ Erreur : fichier .env non créé${NC}"
    exit 1
fi

echo "4. Construction de l'image Docker..."
echo "   Cela peut prendre plusieurs minutes (téléchargement de Python, pip install...)"
echo ""

if docker-compose -f docker/docker-compose.yml build; then
    echo -e "${GREEN}✓ Image Docker construite avec succès${NC}"
else
    echo -e "${RED}❌ Erreur lors de la construction de l'image.${NC}"
    echo "   Consultez les erreurs ci-dessus."
    exit 1
fi

echo ""
echo "5. Démarrage du container..."
echo ""

if docker-compose -f docker/docker-compose.yml up -d; then
    echo -e "${GREEN}✓ Container démarré${NC}"
else
    echo -e "${RED}❌ Erreur lors du démarrage du container.${NC}"
    exit 1
fi

echo ""
echo "6. Vérification..."
sleep 3

# Vérifier que le container est en cours d'exécution
CONTAINER_NAME=$(docker-compose -f docker/docker-compose.yml ps -q web 2>/dev/null)

if [ -z "$CONTAINER_NAME" ]; then
    echo -e "${RED}❌ Container non détecté ou arrêté.${NC}"
    echo "   Vérifiez avec : docker-compose -f docker/docker-compose.yml logs"
    exit 1
fi

CONTAINER_STATUS=$(docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null)

if [ "$CONTAINER_STATUS" != "true" ]; then
    echo -e "${RED}❌ Container en état d'arrêt.${NC}"
    echo "   Logs :"
    docker-compose -f docker/docker-compose.yml logs web --tail=20
    exit 1
fi

echo -e "${GREEN}✓ Container est en cours d'exécution${NC}"
echo ""

# Afficher les logs récents
echo "Logs récents :"
docker-compose -f docker/docker-compose.yml logs --tail=10 web
echo ""

# Test HTTP
echo "7. Test de l'application..."
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health | grep -q "200"; then
    echo -e "${GREEN}✓ L'application répond correctement (health check 200)${NC}"
    echo ""
    echo "✅ INSTALLATION RÉUSSIE !"
    echo ""
    echo "Prochaines étapes :"
    echo "  1. Testez dans votre navigateur : http://$(hostname -I | awk '{print $1}'):8000"
    echo "     (ou http://localhost:8000 depuis le NAS)"
    echo "  2. Soumettez le formulaire de contact pour tester"
    echo "  3. Configurez Nginx Proxy Manager pour portfolio.geekbrain.io"
    echo "  4. Ajoutez le logo dans app/static/assets/images/ si ce n'est pas déjà fait"
    echo ""
    echo "Pour voir les logs en temps réel :"
    echo "  docker-compose -f docker/docker-compose.yml logs -f web"
    echo ""
    echo "Pour arrêter :"
    echo "  docker-compose -f docker/docker-compose.yml down"
else
    echo -e "${YELLOW}⚠ Health check ne répond pas 200.${NC}"
    echo "   L'application peut être en cours de démarrage, ou il y a un problème."
    echo "   Vérifiez les logs complets :"
    echo "   docker-compose -f docker/docker-compose.yml logs web"
fi

echo ""
echo "=========================================="
echo "Fin du script d'installation"
echo "=========================================="
