#!/usr/bin/env bash
set -euo pipefail

# === Config ===
DOCROOT="${HOME}/horaires.devbwc.com"
ZIP_NAME="${1:-horaires_pack_phpmailer_final2.zip}"   # passe le nom du zip en 1er argument si différent
PHP_BIN="${PHP_BIN:-php}"
BASE_URL_DEFAULT="https://horaires.devbwc.com"

echo "==> Docroot: ${DOCROOT}"
echo "==> Zip: ${ZIP_NAME}"
echo "==> URL par défaut: ${BASE_URL_DEFAULT}"

# 0) Où se trouve le ZIP ?
#    On cherche d'abord dans le répertoire courant, puis dans $HOME si absent.
if [[ -f "${ZIP_NAME}" ]]; then
  ZIP_PATH="$(realpath "${ZIP_NAME}")"
elif [[ -f "${HOME}/${ZIP_NAME}" ]]; then
  ZIP_PATH="${HOME}/${ZIP_NAME}"
else
  echo "ERREUR: Zip introuvable: ${ZIP_NAME} (ni ici, ni dans ${HOME})"
  exit 1
fi
echo "==> Zip trouvé: ${ZIP_PATH}"

# 1) Prépare docroot
mkdir -p "${DOCROOT}"
cd "${DOCROOT}"

# 2) Sauvegarde SANS supprimer le ZIP ni le script si jamais ils sont dans le docroot
STAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="${HOME}/${STAMP}_backup_horaires"
mkdir -p "${BACKUP_DIR}"

echo "==> Sauvegarde de l'ancien contenu dans ${BACKUP_DIR}/"
shopt -s dotglob
for item in * ; do
  [[ "${item}" == "." || "${item}" == ".." ]] && continue
  [[ "${item}" == "$(basename "${ZIP_PATH}")" ]] && { echo "   (skip) ${item}"; continue; }
  [[ "${item}" == "deploy_horaires.sh" ]] && { echo "   (skip) ${item}"; continue; }
  mv "${item}" "${BACKUP_DIR}/" || true
done
shopt -u dotglob

# 3) Décompression
echo "==> Décompression du zip"
unzip -o "${ZIP_PATH}" -d .

# 4) Composer (dans /api)
echo "==> Installation des dépendances Composer (PhpSpreadsheet + PHPMailer)"
cd "${DOCROOT}/api"
if [[ ! -f "composer.phar" ]]; then
  ${PHP_BIN} -r "copy('https://getcomposer.org/installer','composer-setup.php');"
  ${PHP_BIN} composer-setup.php
fi
${PHP_BIN} -d memory_limit=-1 composer.phar install --no-dev --optimize-autoloader

# 5) SMTP (.htaccess racine)
cd "${DOCROOT}"
HTA=".htaccess"
touch "${HTA}"
# Supprime anciennes lignes SMTP si rejoue
sed -i '/^SetEnv SMTP_/d; /^SetEnv EMAIL_/d' "${HTA}" || true

echo "==> Configuration SMTP pour PHPMailer"
read -rp "SMTP_HOST (ex: smtp.votreserveur.tld): " SMTP_HOST
read -rp "SMTP_PORT (ex: 587): " SMTP_PORT
read -rp "SMTP_USER (ex: boite@domaine.tld): " SMTP_USER
read -rsp "SMTP_PASSWORD: " SMTP_PASSWORD; echo
read -rp "SMTP_SECURE (tls|ssl) [tls]: " SMTP_SECURE; SMTP_SECURE=${SMTP_SECURE:-tls}
read -rp "EMAIL_TO (destinataire): " EMAIL_TO
read -rp "EMAIL_FROM (expéditeur) [${SMTP_USER}]: " EMAIL_FROM; EMAIL_FROM=${EMAIL_FROM:-${SMTP_USER}}

{
  echo "SetEnv SMTP_HOST ${SMTP_HOST}"
  echo "SetEnv SMTP_PORT ${SMTP_PORT}"
  echo "SetEnv SMTP_USER ${SMTP_USER}"
  echo "SetEnv SMTP_PASSWORD ${SMTP_PASSWORD}"
  echo "SetEnv SMTP_SECURE ${SMTP_SECURE}"
  echo "SetEnv EMAIL_TO ${EMAIL_TO}"
  echo "SetEnv EMAIL_FROM ${EMAIL_FROM}"
  echo "DirectoryIndex index.php"
  echo "Options +FollowSymLinks -MultiViews"
  echo "Options -Indexes"
} >> "${HTA}"

# 6) Création des tables
echo "==> Création des tables MySQL via /api/install.php"
INSTALL_URL="${BASE_URL_DEFAULT%/}/api/install.php"
echo "Appel: ${INSTALL_URL}"
if ! curl -fsS "${INSTALL_URL}" >/dev/null 2>&1; then
  echo "   ⚠️  L'appel automatique a échoué. Ouvre cette URL dans le navigateur:"
  echo "   ${INSTALL_URL}"
else
  curl -sS "${INSTALL_URL}" || true
fi
echo

# 7) Droits
echo "==> Réglage des droits"
chmod 644 "${DOCROOT}"/**/* 2>/dev/null || true
find "${DOCROOT}" -type d -exec chmod 755 {} \; || true
chmod 600 "${DOCROOT}/api/db.php" || true

echo "==> Déploiement terminé."
echo "Ouvre ${BASE_URL_DEFAULT} dans le navigateur, crée un compte et teste l'envoi email."
echo
echo "Tests CLI:"
echo "curl -sS -X POST ${BASE_URL_DEFAULT}/api/create_user.php -H 'Content-Type: application/json' --data '{\"username\":\"test\",\"password\":\"mdp\"}'"
echo "curl -sS -X POST ${BASE_URL_DEFAULT}/api/login.php -H 'Content-Type: application/json' --data '{\"username\":\"test\",\"password\":\"mdp\"}'"
echo "curl -sS -X POST ${BASE_URL_DEFAULT}/api/fill.php -H 'Content-Type: application/json' --data '{\"driver_name\":\"test\",\"week\":37}' -o test_S37.xlsx"
echo "curl -sS -X POST ${BASE_URL_DEFAULT}/api/send_email.php -H 'Content-Type: application/json' --data '{\"driver_name\":\"test\",\"week\":37}'"
