#!/bin/bash
# Script completo para diagnosticar e corrigir erro de vendor/autoload.php
# Domínio: gestor.jf.eng.br
# Data: 2025-11-28

set -e

DOMAIN="gestor.jf.eng.br"

echo "🔍 =========================================="
echo "   Diagnóstico e Correção - GestorStream"
echo "   Domínio: $DOMAIN"
echo "=========================================="
echo ""

# Detectar diretório do projeto automaticamente
echo "📁 [0/8] Detectando diretório do projeto..."
echo "---"

CURRENT_DIR=$(pwd)
echo "Diretório atual: $CURRENT_DIR"

# Verificar se estamos em algum subdiretório do projeto
if [ -d "./backend" ]; then
    PROJECT_ROOT="$CURRENT_DIR"
    echo "✅ Projeto detectado no diretório atual"
elif [ -d "../backend" ]; then
    PROJECT_ROOT=$(cd .. && pwd)
    echo "✅ Projeto detectado um nível acima"
elif [ -d "/var/www/gestorstream/backend" ]; then
    PROJECT_ROOT="/var/www/gestorstream"
    echo "✅ Projeto detectado em /var/www/gestorstream"
elif [ -d "/var/www/backend" ]; then
    PROJECT_ROOT="/var/www"
    echo "✅ Projeto detectado em /var/www"
else
    echo "❌ Não foi possível detectar o diretório do projeto"
    echo "💡 Execute este script dentro do diretório do projeto GestorStream"
    exit 1
fi

BACKEND_PATH="$PROJECT_ROOT/backend"
PUBLIC_PATH="$BACKEND_PATH/public"

echo "📂 Caminhos detectados:"
echo "   - Projeto: $PROJECT_ROOT"
echo "   - Backend: $BACKEND_PATH"
echo "   - Public: $PUBLIC_PATH"
echo ""

# Função para verificar se comando existe
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# 1. VERIFICAR ESTRUTURA DE DIRETÓRIOS
echo "📁 [1/8] Verificando estrutura de diretórios..."
echo "---"

if [ ! -d "$BACKEND_PATH" ]; then
    echo "❌ $BACKEND_PATH não existe!"
    echo "💡 Sugestão: O backend foi clonado corretamente?"
    exit 1
fi

if [ ! -d "$PUBLIC_PATH" ]; then
    echo "❌ $PUBLIC_PATH não existe!"
    exit 1
fi

echo "✅ Estrutura de diretórios OK"
echo "   - $PROJECT_ROOT/ existe"
echo "   - $BACKEND_PATH/ existe"
echo "   - $PUBLIC_PATH/ existe"
echo ""

# 2. VERIFICAR VENDOR
echo "📦 [2/8] Verificando vendor do Laravel..."
echo "---"

if [ ! -d "$BACKEND_PATH/vendor" ]; then
    echo "❌ $BACKEND_PATH/vendor NÃO EXISTE!"
    echo "🔧 Esta é provavelmente a causa do problema."
    echo ""
    
    if command_exists composer; then
        echo "✅ Composer está instalado"
        echo "📥 Instalando dependências do Laravel..."
        cd "$BACKEND_PATH"
        
        # Verificar se composer.json existe
        if [ ! -f "composer.json" ]; then
            echo "❌ composer.json não encontrado em $BACKEND_PATH"
            exit 1
        fi
        
        echo "⏳ Executando: composer install --no-dev --optimize-autoloader"
        composer install --no-dev --optimize-autoloader --no-interaction
        
        if [ $? -eq 0 ]; then
            echo "✅ Dependências instaladas com sucesso!"
        else
            echo "❌ Erro ao instalar dependências"
            echo "💡 Tente executar manualmente: cd $BACKEND_PATH && composer install"
            exit 1
        fi
    else
        echo "❌ Composer não está instalado!"
        echo "💡 Instale com: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer"
        exit 1
    fi
else
    echo "✅ Vendor existe em $BACKEND_PATH/vendor"
    
    # Verificar autoload.php
    if [ ! -f "$BACKEND_PATH/vendor/autoload.php" ]; then
        echo "⚠️ autoload.php não encontrado, recriando..."
        cd "$BACKEND_PATH"
        composer dump-autoload --optimize
    else
        echo "✅ autoload.php existe"
    fi
fi
echo ""

# 3. VERIFICAR PERMISSÕES
echo "🔐 [3/8] Corrigindo permissões..."
echo "---"

echo "⏳ Ajustando proprietário para www-data..."
chown -R www-data:www-data "$BACKEND_PATH"

echo "⏳ Ajustando permissões de diretórios..."
find "$BACKEND_PATH" -type d -exec chmod 755 {} \;

echo "⏳ Ajustando permissões de arquivos..."
find "$BACKEND_PATH" -type f -exec chmod 644 {} \;

echo "⏳ Permissões especiais para storage e bootstrap/cache..."
chmod -R 775 "$BACKEND_PATH/storage"
chmod -R 775 "$BACKEND_PATH/bootstrap/cache"

echo "✅ Permissões corrigidas"
echo ""

# 4. LISTAR TODAS AS CONFIGURAÇÕES NGINX
echo "🔧 [4/8] Verificando configurações Nginx..."
echo "---"

echo "📄 Arquivos em /etc/nginx/sites-enabled/:"
ls -la /etc/nginx/sites-enabled/ 2>/dev/null || echo "⚠️ Diretório não encontrado"
echo ""

# Procurar configurações com o domínio
echo "🔍 Procurando configurações com '$DOMAIN'..."
CONFIGS=$(grep -rl "$DOMAIN" /etc/nginx/ 2>/dev/null || true)

if [ -z "$CONFIGS" ]; then
    echo "⚠️ Nenhuma configuração encontrada para $DOMAIN"
else
    echo "✅ Configurações encontradas:"
    echo "$CONFIGS"
fi
echo ""

# 5. VERIFICAR/CRIAR CONFIGURAÇÃO CORRETA
echo "📝 [5/8] Criando configuração correta para $DOMAIN..."
echo "---"

cat > /tmp/gestorstream.conf << NGINXCONF
server {
    listen 80;
    listen [::]:80;
    server_name gestor.jf.eng.br;
    
    root $PUBLIC_PATH;
    index index.php index.html;

    # Logs
    access_log /var/log/nginx/gestorstream-access.log;
    error_log /var/log/nginx/gestorstream-error.log debug;

    # Charset
    charset utf-8;

    # Client max body size
    client_max_body_size 100M;

    # Laravel routes
    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }

    # PHP handler
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT \$realpath_root;
        include fastcgi_params;
        
        # Buffers aumentados
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    # Deny access to hidden files
    location ~ /\. {
        deny all;
    }

    # Static files cache
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
NGINXCONF

echo "✅ Configuração criada em /tmp/gestorstream.conf"
echo ""
echo "📋 Conteúdo da configuração:"
cat /tmp/gestorstream.conf
echo ""

# 6. BACKUP E APLICAÇÃO
echo "💾 [6/8] Aplicando configuração..."
echo "---"

# Backup de configurações antigas
if [ -f /etc/nginx/sites-available/gestorstream ]; then
    cp /etc/nginx/sites-available/gestorstream /etc/nginx/sites-available/gestorstream.backup.$(date +%Y%m%d_%H%M%S)
    echo "✅ Backup criado"
fi

# Copiar nova configuração
cp /tmp/gestorstream.conf /etc/nginx/sites-available/gestorstream

# Remover links antigos conflitantes
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/sites-enabled/gestorstream

# Criar link simbólico
ln -sf /etc/nginx/sites-available/gestorstream /etc/nginx/sites-enabled/gestorstream

echo "✅ Configuração aplicada"
echo ""

# 7. TESTAR CONFIGURAÇÃO
echo "🧪 [7/8] Testando configuração Nginx..."
echo "---"

nginx -t

if [ $? -eq 0 ]; then
    echo "✅ Configuração válida!"
else
    echo "❌ Erro na configuração Nginx"
    exit 1
fi
echo ""

# 8. RECARREGAR NGINX
echo "🔄 [8/8] Recarregando Nginx..."
echo "---"

systemctl reload nginx

if [ $? -eq 0 ]; then
    echo "✅ Nginx recarregado com sucesso!"
else
    echo "❌ Erro ao recarregar Nginx"
    systemctl status nginx --no-pager
    exit 1
fi
echo ""

# RESUMO FINAL
echo "🎉 =========================================="
echo "   CORREÇÃO CONCLUÍDA"
echo "=========================================="
echo ""
echo "📊 Resumo das ações:"
echo "   ✅ Estrutura de diretórios verificada"
echo "   ✅ Vendor do Laravel instalado/verificado"
echo "   ✅ Permissões corrigidas"
echo "   ✅ Configuração Nginx atualizada"
echo "   ✅ Nginx recarregado"
echo ""
echo "🌐 Acesse agora: http://$DOMAIN/setup"
echo ""
echo "📝 Logs para debugar:"
echo "   - tail -f /var/log/nginx/gestorstream-error.log"
echo "   - tail -f /var/log/nginx/gestorstream-access.log"
echo ""

# Verificar index.php
echo "🔍 Verificação adicional:"
echo "---"
if [ -f "$PUBLIC_PATH/index.php" ]; then
    echo "✅ index.php existe em $PUBLIC_PATH"
    echo "📄 Primeiras linhas do index.php:"
    head -n 20 "$PUBLIC_PATH/index.php"
else
    echo "❌ index.php NÃO EXISTE em $PUBLIC_PATH"
fi
echo ""

echo "✨ Script finalizado!"
