#!/bin/bash

# Script COMPLETO para corrigir erro 403
# Verifica e corrige: dist/, permissões, nginx, build

set -e

FRONTEND_DIR="/var/www/gestorstream/frontend"
DIST_DIR="$FRONTEND_DIR/dist"
NGINX_CONFIG="/etc/nginx/sites-available/gestorstream"
LOG_FILE="/var/www/gestorstream/backend/storage/logs/corrigir-403-completo.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log "========================================="
log "CORREÇÃO COMPLETA DE ERRO 403"
log "========================================="

# Verificar se estamos como root
if [ "$EUID" -ne 0 ]; then
    log "ERRO: Este script DEVE ser executado como root!"
    exit 1
fi

# 1. Verificar diretório frontend
if [ ! -d "$FRONTEND_DIR" ]; then
    log "ERRO: Diretório $FRONTEND_DIR não encontrado!"
    exit 1
fi

cd "$FRONTEND_DIR" || exit 1
log "Diretório atual: $(pwd)"

# 2. Verificar npm
NPM_PATH=$(which npm 2>/dev/null || echo "/usr/bin/npm")
if [ ! -x "$NPM_PATH" ]; then
    log "ERRO: npm não encontrado!"
    exit 1
fi
log "Usando npm: $NPM_PATH"

# 3. Instalar dependências se necessário
if [ ! -d "$FRONTEND_DIR/node_modules" ]; then
    log "Instalando dependências..."
    $NPM_PATH install --no-audit --no-fund 2>&1 | tee -a "$LOG_FILE"
fi

# 4. Ajustar permissões de node_modules
log "Ajustando permissões de node_modules..."
chmod -R u+w "$FRONTEND_DIR/node_modules" 2>/dev/null || true
find "$FRONTEND_DIR/node_modules/.bin" -type f -exec chmod +x {} \; 2>/dev/null || true
find "$FRONTEND_DIR/node_modules/@esbuild" -type f -name "esbuild" -exec chmod +x {} \; 2>/dev/null || true
chown -R www-data:www-data "$FRONTEND_DIR/node_modules" 2>/dev/null || true

# 5. Remover e recriar dist/
log "Limpando dist/..."
rm -rf "$DIST_DIR" 2>/dev/null || true
mkdir -p "$DIST_DIR"
chmod 755 "$DIST_DIR"
chown www-data:www-data "$DIST_DIR"

# 6. Executar build
log "Executando build do frontend..."
export NODE_OPTIONS="--max-old-space-size=4096"
export NPM_CONFIG_CACHE="$FRONTEND_DIR/.npm-cache"
mkdir -p "$NPM_CONFIG_CACHE"
chown -R www-data:www-data "$NPM_CONFIG_CACHE" 2>/dev/null || true

# Tentar como www-data
sudo -u www-data env NODE_OPTIONS="$NODE_OPTIONS" NPM_CONFIG_CACHE="$NPM_CONFIG_CACHE" $NPM_PATH run build 2>&1 | tee -a "$LOG_FILE" || {
    log "Build como www-data falhou. Tentando como root..."
    env NODE_OPTIONS="$NODE_OPTIONS" NPM_CONFIG_CACHE="$NPM_CONFIG_CACHE" $NPM_PATH run build 2>&1 | tee -a "$LOG_FILE"
    chown -R www-data:www-data "$DIST_DIR" 2>/dev/null || true
}

# 7. Verificar index.html
if [ ! -f "$DIST_DIR/index.html" ]; then
    log "ERRO CRÍTICO: index.html não foi criado!"
    log "Conteúdo de dist/:"
    ls -la "$DIST_DIR" | tee -a "$LOG_FILE"
    exit 1
fi

log "SUCESSO: index.html criado!"

# 8. Ajustar permissões finais
log "Ajustando permissões finais..."
chown -R www-data:www-data "$DIST_DIR" 2>/dev/null || true
find "$DIST_DIR" -type d -exec chmod 755 {} \; 2>/dev/null || true
find "$DIST_DIR" -type f -exec chmod 644 {} \; 2>/dev/null || true
chmod 644 "$DIST_DIR/index.html" 2>/dev/null || true

# 9. Verificar configuração do nginx
log "Verificando configuração do nginx..."
if [ -f "$NGINX_CONFIG" ]; then
    # Verificar se está usando root ou proxy_pass
    if grep -q "root.*frontend/dist" "$NGINX_CONFIG" || grep -q "root.*gestorstream/frontend/dist" "$NGINX_CONFIG"; then
        log "Nginx configurado para servir dist/ diretamente"
        NGINX_ROOT=$(grep -E "^\s*root" "$NGINX_CONFIG" | head -1 | awk '{print $2}' | tr -d ';')
        if [ -n "$NGINX_ROOT" ] && [ "$NGINX_ROOT" != "$DIST_DIR" ]; then
            log "AVISO: Nginx root ($NGINX_ROOT) diferente de dist/ ($DIST_DIR)"
        fi
    elif grep -q "proxy_pass.*5173" "$NGINX_CONFIG"; then
        log "AVISO: Nginx está configurado para proxy (modo dev)!"
        log "Isso pode causar erro 403 se o Vite não estiver rodando"
        log "Considere alterar para servir dist/ diretamente"
    else
        log "AVISO: Não foi possível determinar configuração do nginx"
    fi
else
    log "AVISO: Arquivo de configuração do nginx não encontrado em $NGINX_CONFIG"
fi

# 10. Testar nginx
log "Testando configuração do nginx..."
if nginx -t 2>&1 | tee -a "$LOG_FILE"; then
    log "Configuração do nginx está válida"
else
    log "ERRO: Configuração do nginx inválida!"
fi

# 11. Recarregar nginx
log "Recarregando nginx..."
systemctl reload nginx 2>&1 | tee -a "$LOG_FILE" || true

# 12. Verificação final
if [ -f "$DIST_DIR/index.html" ] && sudo -u www-data test -r "$DIST_DIR/index.html"; then
    FILE_COUNT=$(find "$DIST_DIR" -type f | wc -l)
    log "========================================="
    log "SUCESSO: Correção concluída!"
    log "index.html existe e está acessível"
    log "Total de arquivos em dist/: $FILE_COUNT"
    log "========================================="
    exit 0
else
    log "========================================="
    log "ERRO: Correção falhou!"
    log "index.html não está acessível"
    log "========================================="
    exit 1
fi

