#!/bin/bash
# Préparation d'un serveur WHM/cPanel pour AMA Buffet. À lancer en root.
#
#   bash deploy/install-serveur.sh
#
# Le script est idempotent : le relancer ne casse rien.
set -euo pipefail

APP_DIR=/opt/ama-buffet
CP_USER=amabuffet
DOMAIN=app.amabuffet.com
LOCAL_PORT="${WEB_PORT:-8099}"
BIND_ADDR="${BIND_ADDR:-127.0.0.5}"

echo "== 1. Vérifications =="
[ "$(id -u)" -eq 0 ] || { echo "À lancer en root."; exit 1; }
command -v whmapi1 >/dev/null || echo "  (avertissement : WHM non détecté)"

echo "== 2. Docker =="
if ! command -v docker >/dev/null; then
  # Dépôt officiel : les paquets de la distribution sont souvent trop anciens
  # pour « docker compose » en sous-commande.
  dnf install -y dnf-plugins-core || yum install -y yum-utils
  dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 2>/dev/null \
    || yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
    || yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
fi
systemctl enable --now docker
docker --version && docker compose version

echo "== 3. Modules Apache nécessaires au reverse proxy =="
# mod_proxy et mod_proxy_http sont fournis par EasyApache 4.
dnf install -y ea-apache24-mod_proxy ea-apache24-mod_proxy_http 2>/dev/null \
  || yum install -y ea-apache24-mod_proxy ea-apache24-mod_proxy_http 2>/dev/null \
  || echo "  (à vérifier dans WHM → EasyApache 4 → Apache Modules)"

echo "== 4. Dossier applicatif =="
mkdir -p "$APP_DIR"
chmod 750 "$APP_DIR"
echo "  Déposer le code dans $APP_DIR puis y placer le fichier .env (chmod 600)."

echo "== 5. Inclusions Apache pour $DOMAIN =="
for MODE in std ssl; do
  DIR="/etc/apache2/conf.d/userdata/$MODE/2_4/$CP_USER/$DOMAIN"
  mkdir -p "$DIR"
  if [ -f "$APP_DIR/deploy/apache-app.amabuffet.com.conf" ]; then
    sed "s|127.0.0.5:8099|$BIND_ADDR:$LOCAL_PORT|g" \
      "$APP_DIR/deploy/apache-app.amabuffet.com.conf" > "$DIR/proxy.conf"
  fi
done
/scripts/ensure_vhost_includes --user="$CP_USER" || true
/scripts/restartsrv_httpd || true

echo "== 5b. Vérification de l'adresse et du port =="
# Toute la plage 127.0.0.0/8 répond sur Linux : aucune configuration réseau
# n'est nécessaire pour utiliser 127.0.0.5.
if ss -ltn | grep -q "$BIND_ADDR:$LOCAL_PORT"; then
  echo "  ATTENTION : $BIND_ADDR:$LOCAL_PORT est déjà utilisé."
  ss -ltnp | grep "$LOCAL_PORT" || true
else
  echo "  $BIND_ADDR:$LOCAL_PORT libre."
fi

echo "== 6. Pare-feu (CSF) =="
# Le port applicatif n'est PAS ouvert : il n'écoute que sur 127.0.0.1.
if [ -f /etc/csf/csf.conf ]; then
  echo "  CSF détecté : aucune ouverture nécessaire, la pile est locale."
else
  echo "  CSF non détecté, vérifier le pare-feu en place."
fi

echo "== 7. Service systemd =="
if [ -f "$APP_DIR/deploy/ama-buffet.service" ]; then
  cp "$APP_DIR/deploy/ama-buffet.service" /etc/systemd/system/
  systemctl daemon-reload
  echo "  systemctl enable --now ama-buffet   (après avoir rempli le .env)"
fi

echo "== 8. Sauvegarde quotidienne =="
CRON="/etc/cron.d/ama-buffet-backup"
cat > "$CRON" <<CRONEOF
# Sauvegarde chiffrée tous les jours à 3h15
15 3 * * * root cd $APP_DIR && /bin/bash scripts/backup.sh /opt/ama-buffet-backups >> /var/log/ama-backup.log 2>&1
CRONEOF
chmod 644 "$CRON"

echo
echo "Préparation terminée. Étapes restantes : DNS, .env, démarrage, AutoSSL."
