#!/bin/bash
set -euo pipefail

APP_DIR="/opt/link-manager"
APP_USER="linkbot"
PORT_DEFAULT="8080"
SCRIPT_DIR="$(cd -- "$(dirname -- "$0")" && pwd)"

echo "=================================================="
echo " Link Manager - Debian 13 / Apache"
echo "=================================================="

if [ "$(id -u)" -ne 0 ]; then
  echo "Erreur : lance ce script en root."
  exit 1
fi

echo "[1/9] Mise à jour et installation..."
apt-get update
apt-get install -y apache2 certbot python3-certbot-apache python3 python3-venv python3-pip curl ca-certificates ufw fonts-dejavu-core

echo "[2/9] Création de l'utilisateur et des dossiers..."
id "$APP_USER" >/dev/null 2>&1 || useradd --system --home "$APP_DIR" --shell /usr/sbin/nologin "$APP_USER"
mkdir -p "$APP_DIR"/{templates,static,images}

echo "[3/9] Installation de l'environnement Python..."
python3 -m venv "$APP_DIR/venv"
"$APP_DIR/venv/bin/pip" install --upgrade pip
"$APP_DIR/venv/bin/pip" install flask pyyaml requests python-telegram-bot pillow

echo
echo "--------------------------------------------------"
echo " CONFIGURATION DU SERVEUR"
echo "--------------------------------------------------"
read -rp "Domaine (ex: liens.mondomaine.fr) : " DOMAIN
while [ -z "$DOMAIN" ]; do
  read -rp "Domaine obligatoire : " DOMAIN
done

read -rp "Email pour Let's Encrypt : " EMAIL
while [ -z "$EMAIL" ]; do
  read -rp "Email obligatoire : " EMAIL
done

read -rp "Port Python local [$PORT_DEFAULT] : " PORT
PORT="${PORT:-$PORT_DEFAULT}"

echo
echo "[4/9] Création de la configuration..."
# Le config.yaml fourni avec le pack est utilisé.
# On remplace uniquement le domaine et le port pour éviter d'écraser les bots/liens.
if [ ! -f "$SCRIPT_DIR/config.yaml" ]; then
  echo "ERREUR : config.yaml est introuvable dans $SCRIPT_DIR"
  exit 1
fi
cp "$SCRIPT_DIR/config.yaml" "$APP_DIR/config.yaml"
python3 - "$APP_DIR/config.yaml" "$DOMAIN" "$PORT" <<'PYEOF'
from pathlib import Path
import sys
p=Path(sys.argv[1])
s=p.read_text(encoding="utf-8")
import re
s=re.sub(r'(?m)^  domain:.*$', '  domain: "'+sys.argv[2]+'"', s)
s=re.sub(r'(?m)^  port:.*$', '  port: '+sys.argv[3], s)
p.write_text(s, encoding="utf-8")
PYEOF

chown -R "$APP_USER:$APP_USER" "$APP_DIR"
chmod 750 "$APP_DIR"
chmod 600 "$APP_DIR/config.yaml"

echo "[5/9] Installation de link.py..."
# link.py doit être dans le même dossier que ce script.
if [ ! -f "$SCRIPT_DIR/link.py" ]; then
  echo
  echo "ERREUR : link.py est introuvable."
  echo "Il doit être dans le même dossier que install_link_manager.sh."
  echo
  echo "Exemple :"
  echo "  /home/install_link_manager.sh"
  echo "  /home/link.py"
  exit 1
fi

if head -c 100 "$SCRIPT_DIR/link.py" | grep -qiE '<!DOCTYPE|<html|<head'; then
  echo "ERREUR : link.py contient du HTML. Vérifie ton téléchargement."
  exit 1
fi

cp "$SCRIPT_DIR/link.py" "$APP_DIR/link.py"
chown "$APP_USER:$APP_USER" "$APP_DIR/link.py"
chmod 750 "$APP_DIR/link.py"

echo "[6/9] Configuration Apache..."
a2enmod proxy proxy_http headers rewrite ssl >/dev/null

cat > "/etc/apache2/sites-available/${DOMAIN}.conf" <<EOF
<VirtualHost *:80>
    ServerName ${DOMAIN}

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:${PORT}/
    ProxyPassReverse / http://127.0.0.1:${PORT}/

    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-Port "80"

    ErrorLog \${APACHE_LOG_DIR}/link-manager-error.log
    CustomLog \${APACHE_LOG_DIR}/link-manager-access.log combined
</VirtualHost>
EOF

a2dissite 000-default.conf >/dev/null 2>&1 || true
a2ensite "${DOMAIN}.conf" >/dev/null
apache2ctl configtest
systemctl enable apache2
systemctl restart apache2

echo "[7/9] Configuration UFW..."
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable

echo "[8/9] Création du service systemd..."
cat > /etc/systemd/system/link-manager.service <<EOF
[Unit]
Description=Link Manager
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=${APP_USER}
Group=${APP_USER}
WorkingDirectory=${APP_DIR}
Environment=PYTHONUNBUFFERED=1
ExecStart=${APP_DIR}/venv/bin/python ${APP_DIR}/link.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable link-manager

echo "[9/9] Let's Encrypt..."
certbot --apache -d "$DOMAIN" --non-interactive --agree-tos --email "$EMAIL" --redirect

systemctl restart apache2
systemctl restart link-manager

echo
echo "=================================================="
echo " INSTALLATION TERMINEE"
echo "=================================================="
echo "URL       : https://${DOMAIN}"
echo "Config    : ${APP_DIR}/config.yaml"
echo "Service   : link-manager"
echo "Captcha   : activé sur /start"
echo
echo "Pages générées automatiquement pour chaque bot activé :"
echo "  https://${DOMAIN}/<bot>/privacy_policy.php"
echo "  https://${DOMAIN}/<bot>/terms.php"
echo
echo "Tu peux maintenant modifier :"
echo "  nano ${APP_DIR}/config.yaml"
echo
echo "Puis :"
echo "  systemctl restart link-manager"
echo
echo "Logs :"
echo "  journalctl -u link-manager -f"
echo "=================================================="
