#!/bin/bash
# ─────────────────────────────────────────────────────────────────────────────
# HANDIPARTNER — Script de déploiement OVH
# Usage : bash deploy-ovh.sh
# Prérequis : accès SSH baumberg-ssh@ssh.cluster110.hosting.ovh.net
# ─────────────────────────────────────────────────────────────────────────────

set -e

# ── CONFIG ────────────────────────────────────────────────────────────────────
OVH_USER="baumberg-ssh"
OVH_HOST="ssh.cluster110.hosting.ovh.net"
OVH_PORT="22"
HOME_DIR="/homez.608/baumberg"
REMOTE_APP="$HOME_DIR/handipartner-laravel"     # app Laravel (hors webroot WP)
REMOTE_WP="$HOME_DIR/HandiPartner"              # WordPress actuel
LOCAL_PROJECT="$(cd "$(dirname "$0")"; pwd)"
# ─────────────────────────────────────────────────────────────────────────────

echo ""
echo "╔══════════════════════════════════════════════════════╗"
echo "║       HANDIPARTNER — Déploiement OVH                 ║"
echo "╚══════════════════════════════════════════════════════╝"
echo ""

# 1. Build assets
echo "▶ 1/6 Build des assets Vite..."
npm run build
# Supprime un éventuel fichier 'hot' laissé par 'npm run dev' : sinon @vite pointe
# le CSS/JS vers http://[::1]:5179 (dev server) → aucun style chez les visiteurs.
rm -f "$LOCAL_PROJECT/public/hot"

# 2. Rsync
echo "▶ 2/6 Envoi des fichiers vers OVH..."
rsync -avz --progress \
    --exclude='.git' \
    --exclude='node_modules' \
    --exclude='.env' \
    --exclude='.env.production' \
    --exclude='deploy-ovh.sh' \
    --exclude='.DS_Store' \
    --exclude='public/hot' \
    --exclude='storage/logs/*.log' \
    --exclude='storage/framework/cache/*' \
    --exclude='storage/framework/sessions/*' \
    -e "ssh -p $OVH_PORT" \
    "$LOCAL_PROJECT/" \
    "$OVH_USER@$OVH_HOST:$REMOTE_APP/"

# 3. DB SQLite — UNIQUEMENT au 1er déploiement (sinon on écraserait les leads de prod !)
echo "▶ 3/6 Base de données SQLite..."
if ssh -p $OVH_PORT "$OVH_USER@$OVH_HOST" "test -f '$REMOTE_APP/database/database.sqlite'"; then
    echo "   ⏭️  DB déjà présente sur le serveur → conservée (leads/contenu prod intacts)."
    echo "      Les évolutions de schéma se font via 'php artisan migrate --force' (étape 5)."
else
    echo "   ⬆️  Première mise en ligne → envoi de la base initiale."
    rsync -avz --progress -e "ssh -p $OVH_PORT" \
        "$LOCAL_PROJECT/database/database.sqlite" \
        "$OVH_USER@$OVH_HOST:$REMOTE_APP/database/"
fi

# 4. .env production — envoyé seulement s'il existe en local.
#    Sinon on conserve le .env déjà présent sur le serveur (évite de planter
#    le déploiement ; le set -e stopperait sur un scp d'un fichier absent).
echo "▶ 4/6 Envoi du .env de production..."
if [ -f "$LOCAL_PROJECT/.env.production" ]; then
    scp -P $OVH_PORT \
        "$LOCAL_PROJECT/.env.production" \
        "$OVH_USER@$OVH_HOST:$REMOTE_APP/.env"
    echo "   ✅ .env.production envoyé."
else
    echo "   ⏭️  .env.production absent en local → on conserve le .env du serveur."
fi

# 5. Config serveur
echo "▶ 5/6 Configuration sur le serveur..."
# OVH = PHP 8.4 (binaire 'php'), vendor/ deja envoye par rsync, pas de composer ni storage:link
# (public/storage est un vrai dossier contenant les medias)
ssh -p $OVH_PORT "$OVH_USER@$OVH_HOST" "
    set -e
    APP='$REMOTE_APP'
    cd \"\$APP\"

    chmod -R 755 storage bootstrap/cache
    find public/storage -type f -exec chmod 644 {} \; 2>/dev/null || true

    # Filet de sécurité : jamais de fichier 'hot' en prod (sinon @vite sert
    # le CSS/JS depuis le dev server http://[::1]:5179 → site sans styles).
    rm -f public/hot

    # NE PAS cacher config/routes/vues : OVH mutualisé voit le home sous plusieurs
    # chemins (/homez.608/baumberg vs /home/baumberg) selon le nœud web -> un cache
    # CLI fige un chemin absolu et provoque des 500. On vide tout, sans recacher.
    php artisan optimize:clear 2>/dev/null || true
    php artisan migrate --force

    echo 'Configuration OK'
"

# 6. Publication dans le webroot (VRAI dossier — OVH refuse un docroot symlink + 403 sur sous-dossiers)
echo "▶ 6/6 Publication dans le webroot..."
ssh -p $OVH_PORT "$OVH_USER@$OVH_HOST" "
    set -e
    APP='$REMOTE_APP'
    WEB='$REMOTE_WP'

    # 1ʳᵉ fois : si le webroot est encore WordPress (ou un symlink), le sauvegarder
    if [ -f \"\$WEB/wp-config.php\" ] || [ -L \"\$WEB\" ]; then
        TS=\$(date +%Y%m%d_%H%M%S)
        echo \"Sauvegarde de l'ancien webroot → \${WEB}_wp_backup_\$TS\"
        mv \"\$WEB\" \"\${WEB}_wp_backup_\$TS\"
    fi
    mkdir -p \"\$WEB\"

    # Synchroniser le contenu de public/ dans le webroot réel (sauf index.php qu'on patche)
    rsync -a --delete --exclude='index.php' --exclude='storage' \"\$APP/public/\" \"\$WEB/\"
    # Les médias (storage/wp-media) : sync sans --delete pour préserver d'éventuels ajouts
    rsync -a \"\$APP/public/storage/\" \"\$WEB/storage/\"

    # index.php de prod : pointe vers l'app située à côté (\$APP)
    cat > \"\$WEB/index.php\" <<'PHPEOF'
<?php
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
\$appBase = __DIR__.'/../handipartner-laravel';
if (file_exists(\$m = \$appBase.'/storage/framework/maintenance.php')) { require \$m; }
require \$appBase.'/vendor/autoload.php';
/** @var Application \$app */
\$app = require_once \$appBase.'/bootstrap/app.php';
\$app->usePublicPath(__DIR__);
\$app->handleRequest(Request::capture());
PHPEOF

    # Permissions web
    find \"\$WEB\" -type d -exec chmod 755 {} \; 2>/dev/null || true
    find \"\$WEB\" -type f -exec chmod 644 {} \; 2>/dev/null || true

    echo 'Webroot publié (vrai dossier + index.php patché)'
"

echo ""
echo "╔══════════════════════════════════════════════════════╗"
echo "║  ✅  Déploiement terminé !                           ║"
echo "║  🌐  https://www.handipartner.fr                     ║"
echo "╚══════════════════════════════════════════════════════╝"
echo ""
echo "⚠️  Vérifications post-déploiement :"
echo "   1. Ouvrir https://www.handipartner.fr — page d'accueil OK ?"
echo "   2. Tester /loi, /quota, /blog, /contact"
echo "   3. Vérifier les logs : ssh OVH → tail -f ~/handipartner-laravel/storage/logs/laravel.log"
echo "   4. Vérifier le simulateur → https://audit.handipartner.fr"
