#!/usr/bin/env bash
# Déploiement : commit + push ici, git pull sur le serveur renova, redémarrage pm2, vérification de l'URL publique.
# Usage : deploy/deploy.sh "message de commit"      (sans changement local : pousse/déploie simplement l'état courant)
#         DEPLOY_ONLY="fichier1 dossier/fichier2" deploy/deploy.sh "message"   (ne committe QUE ces chemins ; le reste de l'arbre est laissé tel quel,
#         utile quand d'autres travaux sont en cours dans le dépôt)
set -euo pipefail
cd "$(dirname "$0")/.."

SERVER="renova@renova.lorraine.fun"
REMOTE_DIR="/home/renova/allweb/ororo"
URL="https://allweb.fun/ororo"
MSG="${1:-}"

# 1) commit (si des changements) — garde-fou : jamais de secrets
if [ -n "${DEPLOY_ONLY:-}" ]; then git add -- $DEPLOY_ONLY; else git add -A; fi
if ! git diff --cached --quiet; then
  if git diff --cached --name-only | grep -E '(^|/)\.env($|\.[^e])|session-secret|\.pem$|id_(rsa|ed25519)' | grep -v '\.env\.example$'; then
    echo "ABANDON : un fichier sensible est dans l'index (voir ci-dessus)" >&2; git reset -q; exit 1
  fi
  [ -n "$MSG" ] || { echo "Il y a des changements : donnez un message de commit." >&2; git reset -q; exit 1; }
  git commit -q -m "$MSG

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>"
  echo "commit : $(git log --oneline -1)"
else
  echo "aucun changement local à committer"
fi

# 2) push
git push -q origin main
echo "push OK ($(git rev-parse --short HEAD))"

# 3) logos téléchargés (hors git) : copie des nouveaux fichiers seulement
if [ -d public/logos ]; then
  rsync -az --ignore-existing public/logos/ "$SERVER:$REMOTE_DIR/public/logos/" && echo "logos synchronisés"
fi

# 4) pull + (npm ci si les dépendances ont changé) + restart pm2, sur le serveur
ssh -o BatchMode=yes "$SERVER" "set -e
  cd $REMOTE_DIR
  before=\$(git rev-parse HEAD)
  git pull --ff-only -q
  after=\$(git rev-parse HEAD)
  echo \"serveur : \$(git log --oneline -1)\"
  if [ \"\$before\" != \"\$after\" ] && git diff --name-only \$before \$after | grep -q '^package-lock.json\$'; then
    echo 'dépendances modifiées : npm ci'; PATH=\$HOME/.nvm/versions/node/v26.4.0/bin:\$PATH npm ci --omit=dev --no-audit --no-fund 2>&1 | tail -2
  fi
  pm2 restart ororo --update-env >/dev/null && echo 'pm2 : ororo redémarré'
  sleep 4
  pm2 describe ororo | grep -E 'status|restarts' | sed 's/│//g' | tr -s ' ' | paste -sd' '
"

# 5) vérification publique
code=$(curl -s -o /dev/null -m 20 -w '%{http_code}' "$URL/api/auth/me" || echo 000)
page=$(curl -s -o /dev/null -m 20 -w '%{http_code}' "$URL/" || echo 000)
echo "vérification : $URL/api/auth/me -> $code (attendu 401) | $URL/ -> $page (attendu 200)"
[ "$code" = "401" ] && [ "$page" = "200" ] || { echo "ATTENTION : la vérification publique a échoué" >&2; exit 2; }
echo "déploiement terminé"
