#!/bin/bash
# =============================================================
# SCRIPT DE DÉPLOIEMENT INITIAL — OVH VPS Ubuntu 22.04
# Application Amendes Football — Ligue de Martinique
# Usage : sudo bash deploy-ovh.sh
# =============================================================

set -e  # Arrêt immédiat si une commande échoue
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'

log()  { echo -e "${GREEN}[✓]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
err()  { echo -e "${RED}[✗]${NC} $1"; exit 1; }

APP_DIR="/var/www/amendes-football"
APP_USER="www-data"
DOMAIN="amendes.ligue-martinique.fff.fr"   # ← À MODIFIER
DB_NAME="amendes_football"
DB_USER="amendes_user"
DB_PASS=$(openssl rand -base64 24)          # Mot de passe généré automatiquement
PHP_VERSION="8.3"

echo ""
echo "========================================================"
echo "  Déploiement Amendes Football — OVH VPS"
echo "  Domaine : $DOMAIN"
echo "========================================================"
echo ""

# ── 1. Mise à jour système ──────────────────────────────────
log "Mise à jour du système..."
apt-get update -q && apt-get upgrade -y -q

# ── 2. Installation des dépendances ─────────────────────────
log "Installation PHP $PHP_VERSION + extensions..."
add-apt-repository -y ppa:ondrej/php
apt-get install -y -q \
    nginx \
    php${PHP_VERSION}-fpm \
    php${PHP_VERSION}-cli \
    php${PHP_VERSION}-mysql \
    php${PHP_VERSION}-xml \
    php${PHP_VERSION}-mbstring \
    php${PHP_VERSION}-intl \
    php${PHP_VERSION}-curl \
    php${PHP_VERSION}-zip \
    php${PHP_VERSION}-gd \
    mysql-server \
    git \
    unzip \
    certbot \
    python3-certbot-nginx \
    supervisor

# ── 3. Composer ──────────────────────────────────────────────
log "Installation de Composer..."
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

# ── 4. Node.js (pour Webpack Encore) ────────────────────────
log "Installation de Node.js 20 LTS..."
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs

# ── 5. Base de données ───────────────────────────────────────
log "Configuration MySQL..."
mysql -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -e "CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
mysql -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"
log "Base de données créée : $DB_NAME / Utilisateur : $DB_USER"
warn "Mot de passe BDD (à sauvegarder !) : $DB_PASS"

# ── 6. Répertoire de l'application ──────────────────────────
log "Création du répertoire applicatif..."
mkdir -p "$APP_DIR"
chown -R "$APP_USER:$APP_USER" "$APP_DIR"

# ── 7. Configuration Nginx ───────────────────────────────────
log "Configuration Nginx..."
cat > /etc/nginx/sites-available/amendes-football << NGINX
server {
    listen 80;
    server_name ${DOMAIN};
    root ${APP_DIR}/public;

    # Redirection vers HTTPS (activée après certbot)
    # return 301 https://\$host\$request_uri;

    index index.php;

    location / {
        try_files \$uri /index.php\$is_args\$args;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/run/php/php${PHP_VERSION}-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT \$realpath_root;
        internal;
    }

    # Sécurité : bloquer l'accès aux fichiers sensibles
    location ~ /\. { deny all; }
    location ~ ^/(\.env|composer\.json|composer\.lock|symfony\.lock) { deny all; }

    # Cache des assets statiques
    location ~* \.(css|js|png|jpg|gif|ico|woff2?)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # Logs
    access_log /var/log/nginx/amendes-football.access.log;
    error_log  /var/log/nginx/amendes-football.error.log;
}

# Configuration HTTPS (décommentée après certbot)
# server {
#     listen 443 ssl http2;
#     server_name ${DOMAIN};
#     root ${APP_DIR}/public;
#     ssl_certificate     /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
#     ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;
#     ssl_protocols TLSv1.2 TLSv1.3;
#     ssl_ciphers HIGH:!aNULL:!MD5;
#     ...mêmes blocs location que ci-dessus...
# }
NGINX

ln -sf /etc/nginx/sites-available/amendes-football /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx

# ── 8. Configuration PHP-FPM ────────────────────────────────
log "Optimisation PHP-FPM..."
cat > /etc/php/${PHP_VERSION}/fpm/pool.d/amendes.conf << PHP
[amendes]
user = www-data
group = www-data
listen = /run/php/php${PHP_VERSION}-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500
php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 12M
php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 60
PHP

systemctl restart php${PHP_VERSION}-fpm

# ── 9. Fichier .env.local ───────────────────────────────────
log "Génération du fichier .env.local..."
APP_SECRET=$(openssl rand -hex 32)
cat > "${APP_DIR}/.env.local" << ENV
APP_ENV=prod
APP_SECRET=${APP_SECRET}
DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@127.0.0.1:3306/${DB_NAME}?serverVersion=8&charset=utf8mb4"

# ⚠️  STRIPE — remplacer par vos vraies clés (dashboard.stripe.com)
STRIPE_PUBLIC_KEY=pk_live_REMPLACER_PAR_VOTRE_CLE_PUBLIQUE
STRIPE_SECRET_KEY=sk_live_REMPLACER_PAR_VOTRE_CLE_SECRETE
STRIPE_WEBHOOK_SECRET=whsec_REMPLACER_PAR_VOTRE_SECRET_WEBHOOK

# Email (SMTP OVH ou Mailgun)
MAILER_DSN=smtp://login:password@pro1.mail.ovh.net:587?encryption=tls
MAILER_FROM=noreply@${DOMAIN}
MAILER_FROM_NAME="Ligue de Football de Martinique"

# Configuration métier
SUSPENSION_DELAI_JOURS=15
ALERTE_JOURS_AVANT=3
ENV

chmod 600 "${APP_DIR}/.env.local"
chown www-data:www-data "${APP_DIR}/.env.local"

# ── 10. Cron jobs ────────────────────────────────────────────
log "Configuration des tâches cron..."
cat > /etc/cron.d/amendes-football << CRON
# Vérification quotidienne des suspensions + envoi alertes (8h00)
0 8 * * * www-data cd ${APP_DIR} && php bin/console app:check-suspensions --env=prod >> /var/log/amendes-suspensions.log 2>&1

# Nettoyage des PaymentIntents "en_cours" bloqués (minuit)
0 0 * * * www-data cd ${APP_DIR} && php bin/console app:cleanup-pending-payments --env=prod >> /var/log/amendes-cleanup.log 2>&1

# Rotation des logs applicatifs (dimanche 2h)
0 2 * * 0 www-data find ${APP_DIR}/var/log -name "*.log" -mtime +30 -delete
CRON

# ── 11. Logrotate ────────────────────────────────────────────
cat > /etc/logrotate.d/amendes-football << LOGROTATE
/var/log/amendes-*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
}
LOGROTATE

# ── 12. Résumé ───────────────────────────────────────────────
echo ""
echo "========================================================"
echo -e "${GREEN}  Installation terminée !${NC}"
echo "========================================================"
echo ""
echo "  Répertoire app  : $APP_DIR"
echo "  Base de données : $DB_NAME"
echo "  Utilisateur BDD : $DB_USER"
echo -e "  Mot de passe BDD: ${RED}$DB_PASS${NC}  ← NOTEZ-LE !"
echo ""
echo "  Prochaines étapes :"
echo "  1. Déployez le code Symfony dans $APP_DIR"
echo "  2. Éditez $APP_DIR/.env.local (clés Stripe !)"
echo "  3. Exécutez : bash deploy-app.sh"
echo "  4. Activez HTTPS : certbot --nginx -d $DOMAIN"
echo ""
