#!/usr/bin/env bash
# Déploiement Nyval IA sur le VPS : remplace le code par une nouvelle version
# puis reconstruit et redémarre les conteneurs Docker automatiquement.
#
# Usage (à exécuter SUR LE VPS, dans le dossier qui contient docker-compose.yml) :
#   ./deploy.sh /chemin/vers/le/nouveau/code
#
# Ce que fait le script :
#   1. Copie le nouveau code par-dessus l'existant (rsync), SANS jamais toucher :
#        - .env (secrets de production : JWT, clé de chiffrement, tokens Shopify…)
#        - backend/storage/uploads (images générées/uploadées — volume persistant)
#        - node_modules (reconstruits par Docker, pas par ce script)
#   2. Reconstruit les images Docker avec le nouveau code (docker compose build).
#   3. Recrée les conteneurs à partir des nouvelles images (docker compose up -d).
#
# Sans ce script : remplacer les fichiers sur le disque ne suffit pas, car les
# conteneurs tournent sur une image déjà construite (COPY . . figé au build) —
# voir CLAUDE.md pour le détail.

set -euo pipefail

SOURCE_DIR="${1:?Usage: ./deploy.sh /chemin/vers/le/nouveau/code}"
TARGET_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

if [ ! -d "$SOURCE_DIR" ]; then
  echo "Erreur : dossier source introuvable : $SOURCE_DIR" >&2
  exit 1
fi

echo "→ Copie de $SOURCE_DIR vers $TARGET_DIR (secrets et données préservés)…"
rsync -a --delete \
  --exclude 'node_modules' \
  --exclude '.env' \
  --exclude '.env.example' \
  --exclude '.git' \
  --exclude '.DS_Store' \
  --exclude 'backend/storage/uploads' \
  --exclude 'frontend/dist' \
  "$SOURCE_DIR"/ "$TARGET_DIR"/

echo "→ Reconstruction des images Docker…"
cd "$TARGET_DIR"
docker compose build backend frontend

echo "→ Redémarrage des conteneurs avec le nouveau code…"
docker compose up -d backend frontend

echo "✓ Déploiement terminé."
docker compose ps
