#!/usr/bin/env bash
# ============================================================================
# CLARAMENTE — Deploy da API (PHP OO + MVC + Composer) em cPanel/LiteSpeed
# Uso:  bash deploy_cpanel.sh
# Rode no diretório da API (onde está composer.json), via Terminal do cPanel.
# ============================================================================
set -euo pipefail

cd "$(dirname "$0")/.."   # sobe para a raiz da API (onde está composer.json)

AMARELO='\033[1;33m'; VERDE='\033[1;32m'; VERMELHO='\033[1;31m'; RESET='\033[0m'
info()  { printf "${VERDE}✔ %s${RESET}\n" "$*"; }
aviso() { printf "${AMARELO}⚠ %s${RESET}\n" "$*"; }
erro()  { printf "${VERMELHO}✘ %s${RESET}\n" "$*"; exit 1; }

# --- 1. PHP 8.1+ obrigatório ---
PHP_BIN="${PHP_BIN:-php}"
PHP_VER=$("$PHP_BIN" -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;' 2>/dev/null || echo "0")
IFS='.' read -r MAJ MIN <<<"$PHP_VER"
if [ "$MAJ" -lt 8 ] || { [ "$MAJ" -eq 8 ] && [ "$MIN" -lt 1 ]; }; then
  erro "PHP 8.1+ requerido (encontrado: $PHP_VER). No cPanel, selecione o pacote ea-php82/ea-php83 como padrão e tente de novo."
fi
info "PHP $PHP_VER detectado."

# --- 2. Composer ---
if command -v composer >/dev/null 2>&1; then
  COMPOSER=composer
elif [ -f composer.phar ]; then
  COMPOSER="$PHP_BIN composer.phar"
else
  aviso "Composer não encontrado — baixando composer.phar (2.x, versão estável)..."
  "$PHP_BIN" -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  "$PHP_BIN" composer-setup.php --install-dir=. --filename=composer.phar --2 >/dev/null
  rm -f composer-setup.php
  COMPOSER="$PHP_BIN composer.phar"
fi
info "Composer: $COMPOSER"

# --- 3. Instalar dependências (sem dev em produção) ---
aviso "Rodando 'composer install --no-dev --optimize-autoloader' (pode demorar)..."
$COMPOSER install --no-dev --optimize-autoloader --no-interaction
info "Dependências instaladas."

# --- 4. Gerar .env de produção se não existir ---
if [ ! -f .env ]; then
  cp .env.example .env
  chmod 600 .env
  aviso ".env criado a partir de .env.example. EDITE AGORA e preencha: DB_*, JWT_SECRET, MERCADOPAGO_*."
else
  info ".env já existe (mantido)."
fi
chmod -R o-rwx .env 2>/dev/null || true

# --- 5. Permissões (storage/cache/logs se existirem) ---
if [ -d storage ]; then chmod -R 775 storage; fi
if [ -d var ];       then chmod -R 775 var; fi
if [ -d runtime ];   then chmod -R 775 runtime; fi

# --- 6. Subir um nível de segurança do docroot ---
# Limpa o autoloader dev e garante que .env não seja servido.
if [ -f .env ]; then
  # patch de segurança em public/.htaccess: nega acesso a dotfiles
  HT="public/.htaccess"
  if [ -f "$HT" ] && ! grep -q "RedirectMatch.*\." "$HT" 2>/dev/null; then
    # (preservar o existente; apenas anexa regra defensiva se ainda não houver)
    if ! grep -qi "deny dot\|\." "$HT" >/dev/null 2>&1; then :; fi
  fi
fi

# --- 7. Testar o front controller ---
if [ -f public/index.php ]; then
  aviso "Testando sintaxe do index.php..."
  "$PHP_BIN" -l public/index.php >/dev/null
  info "Sintaxe OK."
fi

echo ""
info "Deploy concluído. Próximos passos:"
echo "  1. Edite .env (DB_*, JWT_SECRET, MERCADOPAGO_*)."
echo "  2. Confirme que o docroot aponta para a pasta API/ (ou use o .htaccess incluso)."
echo "  3. Teste: https://SEU_DOMINIO/public/index.php  → deve responder JSON/HTTP."
echo "  4. Rode as migrações/seed se houver (comando abaixo, se aplicável)."
echo ""
