#!/usr/bin/env bash
# =============================================================================
# server-setup.sh — Installation initiale du CT Proxmox
#
# À exécuter UNE SEULE FOIS en root sur le CT (Debian/Ubuntu)
# après avoir cloné le repo ou transféré ce script.
#
# Pré-requis : CT Proxmox avec accès internet
# =============================================================================

set -euo pipefail

REPO_URL="${1:-}"          # ex: git@github.com:toi/crowdlending-app.git
APP_DIR="/opt/crowdlending-app"
GH_USER="${SUDO_USER:-root}"

echo ""
echo "========================================"
echo "  Setup serveur — Crowdlending App"
echo "========================================"

# 1. Dépendances système
echo ""
echo "📦 Installation des dépendances système..."
apt-get update -qq
apt-get install -y --no-install-recommends \
  git \
  curl \
  ca-certificates \
  gnupg \
  sqlite3 \
  ufw

# 2. Docker (méthode officielle)
echo ""
echo "🐋 Installation de Docker..."
if ! command -v docker &>/dev/null; then
  install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  chmod a+r /etc/apt/keyrings/docker.gpg
  echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
    https://download.docker.com/linux/debian \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
    > /etc/apt/sources.list.d/docker.list
  apt-get update -qq
  apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  systemctl enable --now docker
  echo "   ✓ Docker installé : $(docker --version)"
else
  echo "   ✓ Docker déjà présent : $(docker --version)"
fi

# 3. Clé SSH pour GitHub (si pas encore présente)
echo ""
echo "🔑 Clé SSH..."
if [ ! -f ~/.ssh/id_ed25519 ]; then
  ssh-keygen -t ed25519 -C "crowdlending-deploy" -f ~/.ssh/id_ed25519 -N ""
  echo ""
  echo "   ┌─────────────────────────────────────────────────────────┐"
  echo "   │  Ajoute cette clé publique dans ton repo GitHub/Gitea   │"
  echo "   │  (Settings → Deploy keys → Add deploy key)              │"
  echo "   └─────────────────────────────────────────────────────────┘"
  echo ""
  cat ~/.ssh/id_ed25519.pub
  echo ""
  read -r -p "   Appuie sur Entrée une fois la clé ajoutée dans GitHub..."
else
  echo "   ✓ Clé SSH déjà présente"
fi

# 4. Clone du repo
echo ""
echo "📂 Clonage du repo..."
if [ -d "$APP_DIR/.git" ]; then
  echo "   ✓ Repo déjà cloné dans $APP_DIR"
else
  if [ -z "$REPO_URL" ]; then
    read -r -p "   URL du repo Git (ex: git@github.com:toi/crowdlending-app.git) : " REPO_URL
  fi
  git clone "$REPO_URL" "$APP_DIR"
  echo "   ✓ Repo cloné dans $APP_DIR"
fi

cd "$APP_DIR"

# 5. Fichier .env
echo ""
echo "⚙  Configuration .env..."
if [ ! -f ".env" ]; then
  cp .env.example .env
  # Générer un JWT_SECRET aléatoire
  JWT_SECRET=$(openssl rand -hex 32)
  sed -i "s/change-me-in-production/$JWT_SECRET/" .env
  echo ""
  echo "   ┌──────────────────────────────────────────────────────────┐"
  echo "   │  Fichier .env créé avec un JWT_SECRET aléatoire.         │"
  echo "   │  Vérifie et adapte si besoin : nano $APP_DIR/.env        │"
  echo "   └──────────────────────────────────────────────────────────┘"
else
  echo "   ✓ .env déjà présent"
fi

# 6. Permissions du script de déploiement
chmod +x "$APP_DIR/deploy.sh"

# 7. Pare-feu (UFW)
echo ""
echo "🔒 Configuration du pare-feu (UFW)..."
ufw allow OpenSSH
ufw allow 8080/tcp comment "crowdlending frontend"
ufw --force enable
echo "   ✓ Ports ouverts : SSH + 8080"

# 8. Premier build et démarrage
echo ""
echo "🚀 Premier build et démarrage..."
docker compose build
docker compose up -d

echo ""
echo "============================================"
echo "  ✅ Installation terminée !"
echo ""
echo "  App disponible sur : http://$(hostname -I | awk '{print $1}'):8080"
echo ""
echo "  Commandes utiles :"
echo "    cd $APP_DIR"
echo "    ./deploy.sh          → déployer une mise à jour"
echo "    docker compose logs -f  → suivre les logs"
echo "    docker compose ps       → état des containers"
echo "============================================"
