#!/bin/bash

# Script para atualizar o sistema após correções no código
# Execute este script sempre que fizer alterações no código
# Versão: 2.0 - Inclui atualização via Git

set -e  # Para o script se houver erro

echo "🚀 Iniciando atualização do sistema..."
echo ""

# Ir para o diretório do backend
cd "$(dirname "$0")" || exit 1

# Verificar se deve atualizar do Git
UPDATE_FROM_GIT=false
if [ "$1" == "--git" ] || [ "$1" == "-g" ]; then
    UPDATE_FROM_GIT=true
fi

# Se for atualização via Git
if [ "$UPDATE_FROM_GIT" = true ]; then
    echo "📥 Atualizando código do Git..."
    if [ -d ".git" ]; then
        CURRENT_BRANCH=$(git branch --show-current)
        echo "Branch atual: $CURRENT_BRANCH"
        git fetch origin
        git pull origin $CURRENT_BRANCH || {
            echo "❌ Erro ao fazer pull do Git"
            exit 1
        }
        echo "✅ Código atualizado do Git"
    else
        echo "⚠️  Diretório não é um repositório Git, pulando atualização..."
    fi
    echo ""
fi

echo "1️⃣ Fazendo backup do composer.lock atual..."
if [ -f composer.lock ]; then
    cp composer.lock composer.lock.backup
    echo "✅ Backup criado: composer.lock.backup"
fi
echo ""

echo "2️⃣ Atualizando dependências do Composer..."
composer update --no-dev --optimize-autoloader --no-interaction
if [ $? -eq 0 ]; then
    echo "✅ Dependências atualizadas"
else
    echo "❌ Erro ao atualizar dependências"
    echo "Tentando restaurar backup..."
    if [ -f composer.lock.backup ]; then
        cp composer.lock.backup composer.lock
        echo "Backup restaurado"
    fi
    exit 1
fi
echo ""

echo "3️⃣ Limpando todos os caches..."
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
php artisan optimize:clear
echo "✅ Caches limpos"
echo ""

echo "4️⃣ Verificando sintaxe PHP..."
php artisan about > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "✅ Sintaxe PHP OK"
else
    echo "❌ Erro na sintaxe PHP - Verifique os logs"
    exit 1
fi
echo ""

echo "5️⃣ Executando migrações pendentes..."
php artisan migrate --force
if [ $? -eq 0 ]; then
    echo "✅ Migrações executadas"
else
    echo "⚠️  Aviso: Algumas migrações podem ter falhado"
fi
echo ""

echo "6️⃣ Recriando caches de produção..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
echo "✅ Caches de produção recriados"
echo ""

echo "7️⃣ Verificando permissões..."
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache 2>/dev/null || echo "⚠️  Não foi possível alterar o owner (pode precisar de sudo)"
echo "✅ Permissões verificadas"
echo ""

echo "8️⃣ Verificando se há erros no log..."
ERROR_COUNT=$(tail -n 100 storage/logs/laravel.log | grep -i "ERROR\|FATAL" | wc -l)
if [ "$ERROR_COUNT" -gt 0 ]; then
    echo "⚠️  Encontrados $ERROR_COUNT erros recentes no log"
    echo "Últimos erros:"
    tail -n 100 storage/logs/laravel.log | grep -i "ERROR\|FATAL" | tail -n 5
else
    echo "✅ Nenhum erro recente encontrado"
fi
echo ""

echo "9️⃣ Reiniciando serviços (se necessário)..."
# Reiniciar queue worker se estiver rodando como serviço
if systemctl is-active --quiet gestorstream-queue-worker 2>/dev/null; then
    systemctl restart gestorstream-queue-worker
    echo "✅ Queue worker reiniciado"
fi

# Reiniciar PHP-FPM se necessário
if systemctl is-active --quiet php8.2-fpm 2>/dev/null; then
    systemctl reload php8.2-fpm
    echo "✅ PHP-FPM recarregado"
elif systemctl is-active --quiet php-fpm 2>/dev/null; then
    systemctl reload php-fpm
    echo "✅ PHP-FPM recarregado"
fi
echo ""

echo "✅ Atualização concluída com sucesso!"
echo ""
echo "📋 Próximos passos:"
echo "1. Teste o sistema no navegador"
echo "2. Verifique os logs se houver problemas: tail -f storage/logs/laravel.log"
echo "3. Verifique se o queue worker está rodando: php artisan queue:work"
echo ""

