#!/bin/bash
# ═══════════════════════════════════════════════════════════════
# deploy-staging.sh — Déploiement automatique branche "develop"
# Cron : * * * * * /home/fase0445/deploy-staging.sh >> /home/fase0445/logs/dev.log 2>&1
# ═══════════════════════════════════════════════════════════════

FRONT_DIR="/home/fase0445/develop/uluana/frontend"
BACK_DIR="/home/fase0445/develop/uluana/backend"
BRANCH="develop"
LOG_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S')] [DEV]"

# ── Vérifier s'il y a des nouveautés ──────────────────────────
git -C "$FRONT_DIR" fetch origin "$BRANCH" --quiet
git -C "$BACK_DIR"  fetch origin "$BRANCH" --quiet

FRONT_LOCAL=$(git -C "$FRONT_DIR" rev-parse HEAD)
FRONT_REMOTE=$(git -C "$FRONT_DIR" rev-parse "origin/$BRANCH")
BACK_LOCAL=$(git -C "$BACK_DIR" rev-parse HEAD)
BACK_REMOTE=$(git -C "$BACK_DIR" rev-parse "origin/$BRANCH")

if [ "$FRONT_LOCAL" = "$FRONT_REMOTE" ] && [ "$BACK_LOCAL" = "$BACK_REMOTE" ] && [ "$1" != "--force" ]; then
    exit 0
fi

echo "$LOG_PREFIX Nouvelle version détectée, déploiement..."

# ── Pull frontend ──────────────────────────────────────────────
if [ "$FRONT_LOCAL" != "$FRONT_REMOTE" ]; then
    # reset --hard plutôt que pull : fait toujours correspondre EXACTEMENT le
    # serveur à la branche distante, résistant à un historique réécrit.
    git -C "$FRONT_DIR" reset --hard "origin/$BRANCH" --quiet
    [ $? -ne 0 ] && echo "$LOG_PREFIX ERREUR git reset frontend" && exit 1
    echo "$LOG_PREFIX Frontend mis à jour"
fi

# ── Pull backend ───────────────────────────────────────────────
if [ "$BACK_LOCAL" != "$BACK_REMOTE" ]; then
    git -C "$BACK_DIR" reset --hard "origin/$BRANCH" --quiet
    [ $? -ne 0 ] && echo "$LOG_PREFIX ERREUR git reset backend" && exit 1
    echo "$LOG_PREFIX Backend mis à jour"

    # Dépendances Composer (dompdf pour la fiche PDF terrain) — non bloquant :
    # si composer est absent sur l'hébergement, le reste du déploiement continue,
    # seule la génération de fiche PDF sera indisponible.
    # Le PATH d'un cron est souvent bien plus restreint que celui d'un shell interactif
    # (o2switch/cPanel) — on ne se fie donc pas qu'à `command -v composer`, on teste
    # aussi les emplacements connus + un composer.phar local éventuel.
    COMPOSER_BIN=""
    if command -v composer >/dev/null 2>&1; then
        COMPOSER_BIN="composer"
    elif [ -x "/opt/cpanel/composer/bin/composer" ]; then
        COMPOSER_BIN="/opt/cpanel/composer/bin/composer"
    elif [ -x "/usr/local/bin/composer" ]; then
        COMPOSER_BIN="/usr/local/bin/composer"
    elif [ -f "$BACK_DIR/composer.phar" ]; then
        COMPOSER_BIN="php $BACK_DIR/composer.phar"
    fi

    if [ -n "$COMPOSER_BIN" ]; then
        HOME=/home/fase0445 COMPOSER_HOME=/home/fase0445/.composer $COMPOSER_BIN install --no-dev --optimize-autoloader --working-dir="$BACK_DIR" --quiet
        [ $? -ne 0 ] && echo "$LOG_PREFIX ATTENTION composer install a échoué (fiche PDF indisponible)"
    else
        echo "$LOG_PREFIX ATTENTION composer introuvable dans les emplacements connus (fiche PDF indisponible) — lancer 'composer install' manuellement dans $BACK_DIR"
    fi
fi

# ── Migrations SQL ─────────────────────────────────────────────
php "$BACK_DIR/deploy/migrate.php"
[ $? -ne 0 ] && echo "$LOG_PREFIX ERREUR migrations SQL" && exit 1

# ── Import catalogue (cards/guides/exemples/quiz — pas de données users/actions) ──
php "$BACK_DIR/import-catalogue.php"
[ $? -ne 0 ] && echo "$LOG_PREFIX ERREUR import catalogue" && exit 1

# ── Import enrichissement PDF (comment_faire_par_etape/exemples_concrets validés) ──
php "$BACK_DIR/import-enrichissement.php" --all
[ $? -ne 0 ] && echo "$LOG_PREFIX ERREUR import enrichissement" && exit 1

# ── Import cartes en attente (_cards_pending_import.json) ──
PENDING="$BACK_DIR/data/cards/_cards_pending_import.json"
SEED="$BACK_DIR/data/cards/_cards_pending_import.seed.json"
[ ! -f "$PENDING" ] && echo '{"pending":[]}' > "$PENDING"
# Fusionner le seed dans le pending à chaque déploiement
[ -f "$SEED" ] && php -r "
  \$seed = json_decode(file_get_contents('$SEED'), true)['pending'] ?? [];
  \$p    = json_decode(file_get_contents('$PENDING'), true);
  \$ids  = array_column(\$p['pending'] ?? [], 'updated_at', 'id');
  foreach (\$seed as \$e) {
    if (!isset(\$ids[\$e['id']]) || \$ids[\$e['id']] < \$e['updated_at'])
      \$p['pending'][] = \$e;
  }
  // Dédupliquer — garder la plus récente par id
  \$byId = [];
  foreach (\$p['pending'] as \$e) {
    if (!isset(\$byId[\$e['id']]) || \$byId[\$e['id']]['updated_at'] < \$e['updated_at'])
      \$byId[\$e['id']] = \$e;
  }
  \$p['pending'] = array_values(\$byId);
  file_put_contents('$PENDING', json_encode(\$p, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
"
php "$BACK_DIR/api/import_cards.php" || echo "$LOG_PREFIX WARN import_cards non bloquant"

echo "$LOG_PREFIX Déploiement OK"

# Mettre à jour version.json avec la date et le SHA du déploiement
DEPLOY_SHA=$(git -C "$BACK_DIR" rev-parse --short HEAD)
DEPLOY_DATE=$(date '+%Y-%m-%d %H:%M')
echo "{"date":"$DEPLOY_DATE","sha":"$DEPLOY_SHA","branch":"$BRANCH"}" > "$FRONT_DIR/version.json"
