#!/usr/bin/env bash
# =============================================================================
# deploy.sh — Mise à jour de crowdlending-app en production
#
# Usage : ./deploy.sh [--no-backup]
#   --no-backup   Saute la sauvegarde de la base (déconseillé)
#
# À exécuter sur le CT Proxmox dans /opt/crowdlending-app
# =============================================================================

set -euo pipefail

APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKUP_DIR="$APP_DIR/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DO_BACKUP=true

# --- Arguments ---
for arg in "$@"; do
  case $arg in
    --no-backup) DO_BACKUP=false ;;
  esac
done

echo ""
echo "========================================="
echo "  Déploiement crowdlending-app — $DATE"
echo "========================================="

cd "$APP_DIR"

# 1. Vérifications préalables
if [ ! -f ".env" ]; then
  echo "❌ Fichier .env manquant. Copier .env.example et remplir les valeurs."
  exit 1
fi

# 2. Sauvegarde de la base SQLite avant toute modification
if [ "$DO_BACKUP" = true ]; then
  echo ""
  echo "📦 Sauvegarde de la base de données..."
  mkdir -p "$BACKUP_DIR"

  # Trouver le fichier .db dans le volume Docker
  DB_CONTAINER="crowdlending-backend"
  if docker ps --format '{{.Names}}' | grep -q "$DB_CONTAINER"; then
    docker cp "$DB_CONTAINER":/app/data/crowdlending.db "$BACKUP_DIR/crowdlending_$DATE.db" 2>/dev/null \
      && echo "   ✓ Sauvegarde : backups/crowdlending_$DATE.db" \
      || echo "   ⚠ Impossible de copier la base (container arrêté ?), on continue."
  else
    echo "   ⚠ Container arrêté, pas de sauvegarde."
  fi

  # Garder seulement les 10 dernières sauvegardes
  ls -t "$BACKUP_DIR"/crowdlending_*.db 2>/dev/null | tail -n +11 | xargs -r rm --
fi

# 3. Récupération du code
echo ""
echo "⬇  Récupération du code (git pull)..."
git pull origin main

# 4. Reconstruction et redémarrage
echo ""
echo "🔨 Build et redémarrage des containers..."
docker compose build --no-cache
docker compose up -d

# 5. Attente que le backend soit healthy
echo ""
echo "⏳ Attente démarrage du backend..."
MAX_WAIT=60
WAITED=0
until docker inspect --format='{{.State.Health.Status}}' crowdlending-backend 2>/dev/null | grep -q "healthy"; do
  if [ $WAITED -ge $MAX_WAIT ]; then
    echo "❌ Le backend ne répond pas après ${MAX_WAIT}s. Vérifier les logs :"
    echo "   docker compose logs backend --tail=50"
    exit 1
  fi
  sleep 3
  WAITED=$((WAITED + 3))
  echo "   ... ($WAITED s)"
done

echo ""
echo "✅ Déploiement terminé avec succès !"
echo "   Frontend : http://$(hostname -I | awk '{print $1}'):8080"
echo "   Logs     : docker compose logs -f"
