#!/bin/bash
# ================================================================
# Gestão de Cobranças SaaS — Auto Instalador com Banco Supabase
# ================================================================
# Uso: chmod +x install.sh && ./install.sh
# ================================================================

set -e

# Cores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'

# Configuração Supabase (já provisionado)
SUPABASE_URL="https://hydsxgkqazozswsodrix.supabase.co"
SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imh5ZHN4Z2txYXpvenN3c29kcml4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODAwMDcyNjEsImV4cCI6MjA5NTU4MzI2MX0.g3Ouz7GPjjucLmS0Q2HW_yoftAfcGr5nCFY0EniWoqk"

echo ""
echo -e "${BLUE}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║   Gestão de Cobranças SaaS - Auto Instalador    ║${NC}"
echo -e "${BLUE}║   com Banco Supabase (PostgreSQL + RLS)         ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════════════╝${NC}"
echo ""

# ─── Funções ────────────────────────────────────────────────────────────────
ok()   { echo -e "  ${GREEN}[OK]${NC} $1"; }
fail() { echo -e "  ${RED}[FALHA]${NC} $1"; }
info() { echo -e "  ${CYAN}[INFO]${NC} $1"; }
warn() { echo -e "  ${YELLOW}[AVISO]${NC} $1"; }
step() { echo -e "\n${BLUE}▶ $1${NC}"; }

check_cmd() {
    if command -v "$1" &>/dev/null; then
        ok "$1 encontrado"
        return 0
    else
        fail "$1 não encontrado"
        return 1
    fi
}

# ─── Step 1: Verificar Requisitos ───────────────────────────────────────────
step "1/6 — Verificando requisitos do sistema..."

PHP_OK=true
COMPOSER_OK=true
NODE_OK=true

check_cmd php || PHP_OK=false
check_cmd composer || COMPOSER_OK=true  # Optional
check_cmd node || NODE_OK=true  # Optional

# Check PHP version
if [ "$PHP_OK" = true ]; then
    PHP_VER=$(php -r "echo PHP_VERSION;" 2>/dev/null | cut -d. -f1,2)
    if php -r "exit(version_compare(PHP_VERSION, '8.3.0', '>=') ? 0 : 1);" 2>/dev/null; then
        ok "PHP $PHP_VER (>= 8.3)"
    else
        warn "PHP $PHP_VER — recomendado 8.3+"
    fi
fi

# Check PHP extensions
for ext in pdo mbstring openssl json bcmath; do
    if php -m 2>/dev/null | grep -qi "^$ext$"; then
        ok "Extensão PHP $ext"
    else
        warn "Extensão PHP $ext não encontrada"
    fi
done

# Check writable dirs
for dir in storage bootstrap/cache; do
    if [ -d "$dir" ] && [ -w "$dir" ]; then
        ok "Permissão escrita: $dir/"
    else
        warn "Sem permissão escrita: $dir/ (criando...)"
        mkdir -p "$dir" 2>/dev/null && chmod -R 775 "$dir" 2>/dev/null
    fi
done

# ─── Step 2: Verificar Banco Supabase ───────────────────────────────────────
step "2/6 — Verificando banco Supabase..."

# Test connection
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
    -H "apikey: $SUPABASE_KEY" \
    -H "Authorization: Bearer $SUPABASE_KEY" \
    "${SUPABASE_URL}/rest/v1/planos?select=id&limit=1" 2>/dev/null || echo "000")

if [ "$HTTP_CODE" = "200" ]; then
    ok "Conexão Supabase OK"

    # Count tables
    TABLES=("planos" "empresas" "usuarios" "assinaturas" "clientes" "configuracoes" "gateways_pagamento" "cobrancas" "pagamentos" "boletos" "pix" "notificacoes" "whatsapp_logs" "webhook_logs" "auditoria")
    TABLE_COUNT=0
    for t in "${TABLES[@]}"; do
        CODE=$(curl -s -o /dev/null -w "%{http_code}" \
            -H "apikey: $SUPABASE_KEY" \
            -H "Authorization: Bearer $SUPABASE_KEY" \
            "${SUPABASE_URL}/rest/v1/${t}?select=id&limit=1" 2>/dev/null || echo "000")
        if [ "$CODE" = "200" ]; then
            TABLE_COUNT=$((TABLE_COUNT + 1))
        fi
    done
    ok "${TABLE_COUNT}/15 tabelas encontradas no Supabase"

    # Check seed data
    PLANOS=$(curl -s -H "apikey: $SUPABASE_KEY" -H "Authorization: Bearer $SUPABASE_KEY" \
        "${SUPABASE_URL}/rest/v1/planos?select=nome" 2>/dev/null | grep -c '"nome"' || echo "0")
    EMPRESAS=$(curl -s -H "apikey: $SUPABASE_KEY" -H "Authorization: Bearer $SUPABASE_KEY" \
        "${SUPABASE_URL}/rest/v1/empresas?select=nome" 2>/dev/null | grep -c '"nome"' || echo "0")

    ok "${PLANOS} planos carregados"
    ok "${EMPRESAS} empresa(s) cadastrada(s)"
else
    fail "Conexão Supabase falhou (HTTP $HTTP_CODE)"
    echo ""
    echo -e "  ${YELLOW}O banco Supabase já está provisionado com as tabelas.${NC}"
    echo -e "  ${YELLOW}As tabelas foram criadas via migration automática.${NC}"
fi

# ─── Step 3: Configurar .env ───────────────────────────────────────────────
step "3/6 — Configurando ambiente (.env)..."

if [ ! -f ".env" ]; then
    cp .env.example .env 2>/dev/null || true
fi

# Write Supabase config to .env
if grep -q "SUPABASE_URL" .env 2>/dev/null; then
    ok ".env já contém configuração Supabase"
else
    cat >> .env << 'ENVEOF'

# Supabase (Auto-configured)
SUPABASE_URL=https://hydsxgkqazozswsodrix.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imh5ZHN4Z2txYXpvenN3c29kcml4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODAwMDcyNjEsImV4cCI6MjA5NTU4MzI2MX0.g3Ouz7GPjjucLmS0Q2HW_yoftAfcGr5nCFY0EniWoqk

# Database (Supabase PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=aws-0-sa-east-1.pooler.supabase.com
DB_PORT=6543
DB_DATABASE=postgres
ENVEOF
    ok "Configuração Supabase adicionada ao .env"
fi

# ─── Step 4: Instalar Dependências ─────────────────────────────────────────
step "4/6 — Instalando dependências PHP..."

if [ -f "composer.json" ] && command -v composer &>/dev/null; then
    if [ ! -d "vendor" ]; then
        composer install --no-dev --optimize-autoloader --no-interaction 2>&1 | tail -3
        ok "Dependências instaladas"
    else
        ok "Vendor/ já existe"
    fi
else
    warn "Composer não disponível — instale manualmente: composer install"
fi

# ─── Step 5: Comandos Laravel ──────────────────────────────────────────────
step "5/6 — Executando comandos Laravel..."

if [ "$PHP_OK" = true ]; then
    # Generate key
    if grep -q "APP_KEY=" .env && ! grep -q "APP_KEY=base64" .env; then
        php artisan key:generate --force 2>/dev/null && ok "APP_KEY gerada" || warn "Key: generate manual necessário"
    else
        ok "APP_KEY já configurada"
    fi

    # Storage link
    if [ ! -L "public/storage" ]; then
        php artisan storage:link 2>/dev/null && ok "Storage link criado" || warn "Storage link manual necessário"
    else
        ok "Storage link já existe"
    fi

    # Optimize
    php artisan config:cache 2>/dev/null && ok "Config cache" || true
    php artisan route:cache 2>/dev/null && ok "Route cache" || true
    php artisan view:cache 2>/dev/null && ok "View cache" || true
else
    warn "PHP CLI não disponível — execute manualmente:"
    echo "  php artisan key:generate"
    echo "  php artisan storage:link"
    echo "  php artisan optimize"
fi

# ─── Step 6: Criar cron ─────────────────────────────────────────────────────
step "6/6 — Configurando scheduler..."

CRON_LINE="* * * * * cd $(pwd) && php artisan schedule:run >> /dev/null 2>&1"

if crontab -l 2>/dev/null | grep -q "schedule:run"; then
    ok "Cron do scheduler já configurado"
else
    info "Para ativar o scheduler, adicione ao crontab:"
    echo -e "  ${CYAN}${CRON_LINE}${NC}"
fi

# ─── Resultado ──────────────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║        INSTALAÇÃO CONCLUÍDA COM SUCESSO!        ║${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "  ${CYAN}Banco de Dados:${NC} Supabase PostgreSQL (14 tabelas com RLS)"
echo -e "  ${CYAN}Tabelas:${NC} planos, empresas, usuarios, assinaturas, clientes,"
echo -e "           cobrancas, pagamentos, boletos, pix, notificacoes,"
echo -e "           whatsapp_logs, webhook_logs, auditoria, configuracoes"
echo ""
echo -e "  ${CYAN}Credenciais de Acesso:${NC}"
echo -e "  ${YELLOW}Super Admin:${NC}  admin@gestaocobrancas.com.br / Admin@123456"
echo -e "  ${YELLOW}Empresa Demo:${NC} admin@empresa.com / Demo@123456"
echo ""
echo -e "  ${CYAN}Planos SaaS cadastrados:${NC}"
echo -e "  Básico (R$49/mês) | Profissional (R$99/mês) | Empresarial (R$249/mês)"
echo ""
echo -e "  ${CYAN}Próximos passos:${NC}"
echo -e "  1. Acesse: ${BLUE}http://localhost${NC} ou ${BLUE}http://localhost/install.html${NC}"
echo -e "  2. Configure gateways (Mercado Pago / PagSeguro) no painel"
echo -e "  3. Configure WhatsApp Business API no painel"
echo -e "  4. Veja documentação completa: ${BLUE}INSTALACAO.md${NC}"
echo ""
