#!/bin/bash

# Script de Diagnóstico do Servidor
# Execute: bash diagnostico-servidor.sh

echo "=========================================="
echo "  DIAGNÓSTICO DO SERVIDOR"
echo "=========================================="
echo ""

APP_DIR="/var/www/gestorstream"
BACKEND_DIR="$APP_DIR/backend"

# 1. Verificar serviços
echo "1. Verificando serviços..."
echo ""

echo "   Nginx:"
systemctl is-active --quiet nginx && echo "   ✅ Nginx está rodando" || echo "   ❌ Nginx NÃO está rodando"

echo ""
echo "   PHP-FPM:"
if systemctl is-active --quiet php8.2-fpm; then
    echo "   ✅ PHP 8.2-FPM está rodando"
else
    echo "   ❌ PHP 8.2-FPM NÃO está rodando"
    echo "   Tentando verificar outras versões..."
    systemctl is-active --quiet php8.1-fpm && echo "   ✅ PHP 8.1-FPM está rodando" || echo "   ❌ PHP 8.1-FPM NÃO está rodando"
    systemctl is-active --quiet php8.0-fpm && echo "   ✅ PHP 8.0-FPM está rodando" || echo "   ❌ PHP 8.0-FPM NÃO está rodando"
fi

echo ""
echo "   MySQL/MariaDB:"
systemctl is-active --quiet mysql && echo "   ✅ MySQL está rodando" || systemctl is-active --quiet mariadb && echo "   ✅ MariaDB está rodando" || echo "   ❌ MySQL/MariaDB NÃO está rodando"

echo ""
echo "   Queue Worker:"
systemctl is-active --quiet gestorstream-worker && echo "   ✅ Queue Worker está rodando" || echo "   ⚠️  Queue Worker NÃO está rodando (pode ser normal)"

echo ""

# 2. Verificar logs do Nginx
echo "2. Últimas linhas do log de erro do Nginx:"
echo ""
if [ -f /var/log/nginx/error.log ]; then
    echo "   Últimas 5 linhas:"
    tail -5 /var/log/nginx/error.log | sed 's/^/   /'
else
    echo "   ⚠️  Arquivo de log não encontrado"
fi
echo ""

# 3. Verificar logs do PHP-FPM
echo "3. Últimas linhas do log do PHP-FPM:"
echo ""
PHP_FPM_LOG=""
for log in /var/log/php8.2-fpm.log /var/log/php8.1-fpm.log /var/log/php8.0-fpm.log /var/log/php-fpm.log; do
    if [ -f "$log" ]; then
        PHP_FPM_LOG="$log"
        break
    fi
done

if [ -n "$PHP_FPM_LOG" ]; then
    echo "   Usando: $PHP_FPM_LOG"
    echo "   Últimas 5 linhas:"
    tail -5 "$PHP_FPM_LOG" | sed 's/^/   /'
else
    echo "   ⚠️  Arquivo de log não encontrado"
fi
echo ""

# 4. Verificar permissões
echo "4. Verificando permissões..."
echo ""
cd "$BACKEND_DIR" || exit 1

if [ -w "storage" ]; then
    echo "   ✅ storage/ é gravável"
else
    echo "   ❌ storage/ NÃO é gravável"
    echo "   Owner: $(stat -c '%U:%G' storage 2>/dev/null || echo 'N/A')"
    echo "   Permissões: $(stat -c '%a' storage 2>/dev/null || echo 'N/A')"
fi

if [ -w "bootstrap/cache" ]; then
    echo "   ✅ bootstrap/cache/ é gravável"
else
    echo "   ⚠️  bootstrap/cache/ NÃO é gravável"
    echo "   Owner: $(stat -c '%U:%G' bootstrap/cache 2>/dev/null || echo 'N/A')"
    echo "   Permissões: $(stat -c '%a' bootstrap/cache 2>/dev/null || echo 'N/A')"
fi
echo ""

# 5. Verificar espaço em disco
echo "5. Espaço em disco:"
echo ""
df -h / | tail -1 | awk '{print "   Disponível: " $4 " de " $2 " (" $5 " usado)"}'
echo ""

# 6. Verificar memória
echo "6. Memória:"
echo ""
free -h | grep Mem | awk '{print "   Total: " $2 ", Usado: " $3 ", Disponível: " $7}'
echo ""

# 7. Testar conexão HTTP local
echo "7. Testando conexão HTTP local..."
echo ""
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/api/v1/setup/check 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "401" ] || [ "$HTTP_CODE" = "422" ]; then
    echo "   ✅ Servidor responde (HTTP $HTTP_CODE)"
else
    echo "   ❌ Servidor não responde ou retornou erro (HTTP $HTTP_CODE)"
fi
echo ""

# 8. Verificar configuração do Nginx
echo "8. Verificando configuração do Nginx..."
echo ""
if nginx -t 2>&1 | grep -q "successful"; then
    echo "   ✅ Configuração do Nginx está OK"
else
    echo "   ❌ Erro na configuração do Nginx:"
    nginx -t 2>&1 | sed 's/^/   /'
fi
echo ""

# 9. Verificar se há processos PHP travados
echo "9. Processos PHP em execução:"
echo ""
PHP_COUNT=$(pgrep -c php-fpm || echo "0")
echo "   Processos PHP-FPM: $PHP_COUNT"
if [ "$PHP_COUNT" -gt 50 ]; then
    echo "   ⚠️  Muitos processos PHP (pode indicar problema)"
fi
echo ""

# 10. Verificar último commit do Git
echo "10. Status do Git:"
echo ""
cd "$APP_DIR" || exit 1
if [ -d .git ]; then
    echo "   Branch atual: $(git branch --show-current 2>/dev/null || echo 'N/A')"
    echo "   Último commit: $(git log -1 --format='%h - %s (%ar)' 2>/dev/null || echo 'N/A')"
    echo "   Status: $(git status --porcelain 2>/dev/null | wc -l) arquivo(s) modificado(s)"
else
    echo "   ⚠️  Não é um repositório Git"
fi
echo ""

echo "=========================================="
echo "  FIM DO DIAGNÓSTICO DO SERVIDOR"
echo "=========================================="
