#!/usr/bin/env bash
# ============================================================
#  install.sh — Installation du projet et de la tâche cron
#  Usage : sudo bash install.sh /var/www/mon-projet www-data
# ============================================================

set -euo pipefail

# ── Paramètres ───────────────────────────────────────────────
INSTALL_DIR="${1:-/var/www/ftp-import}"
CRON_USER="${2:-www-data}"
PHP_BIN="${3:-/usr/bin/php}"
SCRIPT="$INSTALL_DIR/import.php"
LOG_DIR="$INSTALL_DIR/logs"
TMP_DIR="$INSTALL_DIR/tmp"
CRON_SCHEDULE="0 5 * * *"   # 05:00 chaque jour

GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m'
ok()  { echo -e "${GREEN}✔ $*${NC}"; }
err() { echo -e "${RED}✘ $*${NC}" >&2; exit 1; }

# ── Vérifications préliminaires ──────────────────────────────
[[ $EUID -eq 0 ]] || err "Ce script doit être exécuté en root (sudo)."
command -v php  >/dev/null 2>&1 || err "PHP introuvable. Installez PHP CLI d'abord."
command -v crontab >/dev/null 2>&1 || err "crontab introuvable."

# ── Copie des fichiers ───────────────────────────────────────
echo "→ Déploiement dans $INSTALL_DIR…"
mkdir -p "$INSTALL_DIR" "$LOG_DIR" "$TMP_DIR"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for f in config.php import.php Logger.php FtpClient.php CsvReader.php ProductImporter.php; do
    cp "$SCRIPT_DIR/$f" "$INSTALL_DIR/$f"
done
ok "Fichiers copiés"

# ── Permissions ──────────────────────────────────────────────
chown -R "$CRON_USER:$CRON_USER" "$INSTALL_DIR"
chmod 750 "$INSTALL_DIR"
chmod 640 "$INSTALL_DIR/config.php"   # protéger les credentials
chmod 750 "$LOG_DIR" "$TMP_DIR"
chmod +x  "$SCRIPT"
ok "Permissions appliquées (propriétaire : $CRON_USER)"

# ── Extension PHP FTP ─────────────────────────────────────────
php -r "if(!extension_loaded('ftp')) exit(1);" 2>/dev/null \
    || echo "⚠ Extension FTP absente. Installez : apt install php-ftp"

# ── Ajout de la cron ─────────────────────────────────────────
CRON_CMD="$PHP_BIN $SCRIPT >> $LOG_DIR/cron.log 2>&1"
CRON_LINE="$CRON_SCHEDULE $CRON_CMD"

# Récupère la crontab existante de l'utilisateur
EXISTING=$(crontab -u "$CRON_USER" -l 2>/dev/null || true)

if echo "$EXISTING" | grep -qF "$SCRIPT"; then
    echo "⚠ Entrée cron déjà présente — mise à jour…"
    NEW_CRON=$(echo "$EXISTING" | grep -vF "$SCRIPT")
    { echo "$NEW_CRON"; echo "$CRON_LINE"; } | crontab -u "$CRON_USER" -
else
    { echo "$EXISTING"; echo "$CRON_LINE"; } | crontab -u "$CRON_USER" -
fi

ok "Tâche cron installée pour l'utilisateur '$CRON_USER' :"
echo "    $CRON_LINE"

# ── Récapitulatif ────────────────────────────────────────────
echo ""
echo "════════════════════════════════════════════"
echo "  Installation terminée !"
echo "────────────────────────────────────────────"
echo "  Répertoire : $INSTALL_DIR"
echo "  Logs       : $LOG_DIR/import.log"
echo "  Cron log   : $LOG_DIR/cron.log"
echo ""
echo "  → Éditez $INSTALL_DIR/config.php"
echo "    pour renseigner vos identifiants FTP et SQL."
echo ""
echo "  → Test manuel :"
echo "    sudo -u $CRON_USER $PHP_BIN $SCRIPT --verbose --dry-run"
echo "════════════════════════════════════════════"
