#!/bin/bash
# =============================================================================
# AIRPOST — AMBIENTE LOCAL (macOS)
# -----------------------------------------------------------------------------
# Sobe Apache + PHP + MySQL apontando para esta pasta, para testar antes de
# publicar.
#
# COMO RODAR:   bash setup-local.sh
# Vai pedir sua senha (sudo) algumas vezes. Pode rodar de novo sem problema —
# tudo aqui é idempotente.
#
# O QUE JÁ EXISTE E NÃO É INSTALADO: o Apache (2.4.66) vem com o macOS.
# O QUE FALTA: Homebrew, PHP e MySQL.
#
# ⚠️  ESTE SCRIPT NÃO TOCA NO BANCO DE PRODUÇÃO E NÃO ALTERA config.php.
#     A troca de credenciais é feita por detecção de ambiente — ver o passo 5.
# =============================================================================
set -e

PROJETO="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PORTA=8080

echo "▸ Projeto: $PROJETO"
echo

# --- 1. Homebrew ------------------------------------------------------------
if ! command -v brew >/dev/null 2>&1; then
    echo "▸ [1/6] Instalando Homebrew..."
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    # Apple Silicon instala em /opt/homebrew; Intel em /usr/local.
    if [ -d /opt/homebrew/bin ]; then eval "$(/opt/homebrew/bin/brew shellenv)"; fi
else
    echo "▸ [1/6] Homebrew: já instalado"
fi

# --- 2. PHP e MySQL ---------------------------------------------------------
echo "▸ [2/6] Instalando PHP e MySQL (pode demorar)..."
brew list php    >/dev/null 2>&1 || brew install php
brew list mysql  >/dev/null 2>&1 || brew install mysql

PHP_BIN="$(brew --prefix php)/bin/php"
echo "    PHP:   $($PHP_BIN -v | head -1)"

# Extensões que o projeto usa. mysqli e curl vêm no pacote do brew; gd também.
for EXT in mysqli curl gd mbstring openssl json; do
    $PHP_BIN -m | grep -qi "^$EXT$" && echo "    ✓ $EXT" || echo "    ✗ $EXT  (FALTA)"
done

# --- 3. Serviços ------------------------------------------------------------
echo "▸ [3/6] Subindo php-fpm e mysql..."
brew services start php   >/dev/null 2>&1 || true
brew services start mysql >/dev/null 2>&1 || true
sleep 3

# --- 4. Apache --------------------------------------------------------------
# O Apache do macOS não tem PHP embutido (removido no Monterey). O caminho
# atual é falar com o php-fpm por FastCGI — daí mod_proxy + mod_proxy_fcgi.
echo "▸ [4/6] Configurando o Apache..."
VHOST="/etc/apache2/other/airpost-local.conf"

sudo /usr/bin/sed -i '' \
    -e 's|^#\(LoadModule rewrite_module\)|\1|' \
    -e 's|^#\(LoadModule proxy_module\)|\1|' \
    -e 's|^#\(LoadModule proxy_fcgi_module\)|\1|' \
    /etc/apache2/httpd.conf

sudo tee "$VHOST" >/dev/null <<EOF
# Airpost local — gerado por setup-local.sh. Editar à vontade.
Listen $PORTA
<VirtualHost *:$PORTA>
    DocumentRoot "$PROJETO"
    DirectoryIndex index.php index.html

    <Directory "$PROJETO">
        # AllowOverride All é obrigatório: o roteamento do projeto vive no
        # .htaccess da raiz (regras de sitev2 e URLs amigáveis).
        AllowOverride All
        Require all granted
        Options FollowSymLinks
    </Directory>

    <FilesMatch \.php\$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>

    ErrorLog "/tmp/airpost-local-error.log"
    CustomLog "/tmp/airpost-local-access.log" common
</VirtualHost>
EOF

sudo /usr/sbin/apachectl configtest && sudo /usr/sbin/apachectl restart
echo "    Apache ok na porta $PORTA"

# --- 5. Config por ambiente -------------------------------------------------
# ⚠️  A pasta local SINCRONIZA com /var/www/html no servidor. Sobrescrever
#     config.php com credenciais locais publicaria isso em produção e derrubaria
#     o site. Por isso o arquivo NÃO é alterado: criamos um config.local.php
#     separado, e o config.php passa a carregá-lo APENAS quando o host é local.
echo "▸ [5/6] Config local (sem tocar no config.php de produção)..."

LOCAL_CFG="$PROJETO/BIN/config.local.php"
if [ ! -f "$LOCAL_CFG" ]; then
    cat > "$LOCAL_CFG" <<'EOF'
<?php
// Credenciais do MySQL LOCAL. Este arquivo é só da sua máquina.
// Adicione BIN/config.local.php ao .gitignore.
define('AIRPOST_DB_HOST', '127.0.0.1');
define('AIRPOST_DB_USER', 'root');
define('AIRPOST_DB_PASS', '');
define('AIRPOST_DB_NAME', 'airpost');
EOF
    echo "    criado: BIN/config.local.php"
else
    echo "    já existe: BIN/config.local.php"
fi

grep -q "config.local.php" "$PROJETO/.gitignore" 2>/dev/null || \
    echo -e "\n# Credenciais do ambiente local\nBIN/config.local.php" >> "$PROJETO/.gitignore"

# --- 6. Banco ---------------------------------------------------------------
echo "▸ [6/6] Criando o banco local 'airpost' (vazio)..."
"$(brew --prefix mysql)/bin/mysql" -u root -e \
    "CREATE DATABASE IF NOT EXISTS airpost CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" \
    2>/dev/null && echo "    banco 'airpost' pronto" || echo "    ⚠ não consegui criar — rode: mysql -u root -e \"CREATE DATABASE airpost\""

echo
echo "============================================================"
echo "  PRONTO.  http://localhost:$PORTA"
echo "============================================================"
echo
echo "FALTA O ESQUEMA DO BANCO — o banco local está vazio."
echo "Para trazer a estrutura de produção (SEM os dados):"
echo
echo "  mysqldump --no-data -h <HOST> -u <USER> -p airpost > /tmp/airpost-schema.sql"
echo "  mysql -u root airpost < /tmp/airpost-schema.sql"
echo
echo "Logs:  /tmp/airpost-local-error.log"
echo "Parar: sudo apachectl stop && brew services stop php mysql"
