#!/bin/bash
#############################################
# Script Rápido para Corrigir Instalação
# Use após o install-production.sh ter parado
#############################################

set -e

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

echo "🔧 Corrigindo instalação do GestorStream..."
echo ""

# 1. Corrigir DB_HOST no .env
echo "1. Corrigindo configuração do banco de dados..."
cd "$BACKEND_DIR"

if [ -f ".env" ]; then
    # Corrigir DB_HOST
    sed -i 's/DB_HOST=.*/DB_HOST=127.0.0.1/' .env
    
    # Verificar se DB_DATABASE está correto (ajustar se necessário)
    if ! grep -q "DB_DATABASE=gs_DerenBox" .env 2>/dev/null; then
        read -p "Nome do banco de dados [gs_DerenBox]: " DB_NAME
        DB_NAME=${DB_NAME:-gs_DerenBox}
        sed -i "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" .env
    fi
    
    # Verificar autenticação MySQL - criar usuário dedicado se necessário
    DB_USER=$(grep DB_USERNAME .env | cut -d'=' -f2 | tr -d ' ')
    DB_PASS=$(grep DB_PASSWORD .env | cut -d'=' -f2 | tr -d ' ')
    
    if [ "$DB_USER" = "root" ] || [ -z "$DB_PASS" ]; then
        echo "⚠️  Root sem senha detectado. Criando usuário dedicado..."
        
        # Gerar senha aleatória
        NEW_PASS=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-12)
        DB_NAME=$(grep DB_DATABASE .env | cut -d'=' -f2 | tr -d ' ')
        
        # Criar usuário no MySQL (tentar sem sudo primeiro, depois com sudo)
        if mysql -u root -e "SELECT 1;" &>/dev/null 2>&1; then
            MYSQL_CMD="mysql -u root"
        else
            MYSQL_CMD="sudo mysql -u root"
        fi
        
        $MYSQL_CMD << SQL
CREATE USER IF NOT EXISTS 'gestorstream'@'localhost' IDENTIFIED BY '$NEW_PASS';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO 'gestorstream'@'localhost';
FLUSH PRIVILEGES;
SQL
        
        if [ $? -eq 0 ]; then
            # Atualizar .env
            sed -i 's/DB_USERNAME=.*/DB_USERNAME=gestorstream/' .env
            sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=$NEW_PASS|" .env
            
            echo "✅ Usuário 'gestorstream' criado"
            echo "   Senha salva em .env"
        else
            echo "⚠️  Não foi possível criar usuário. Continue manualmente."
        fi
    fi
    
    echo "✅ .env corrigido"
    echo "   DB_HOST=$(grep DB_HOST .env | cut -d'=' -f2)"
    echo "   DB_DATABASE=$(grep DB_DATABASE .env | cut -d'=' -f2)"
    echo "   DB_USERNAME=$(grep DB_USERNAME .env | cut -d'=' -f2)"
else
    echo "❌ Arquivo .env não encontrado!"
    exit 1
fi

# 2. Limpar cache
echo ""
echo "2. Limpando cache..."
php artisan config:clear
echo "✅ Cache limpo"

# 3. Executar migrações
echo ""
echo "3. Executando migrações..."
php artisan migrate --force
echo "✅ Migrações executadas"

# 4. Criar serviços systemd
echo ""
echo "4. Criando serviços systemd..."

# Backend
cat > /etc/systemd/system/gestorstream-backend.service << 'EOF'
[Unit]
Description=GestorStream Backend API
After=network.target mysql.service redis.service

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/gestorstream/backend
Environment="PATH=/usr/bin:/usr/sbin"
ExecStart=/usr/bin/php8.2 /var/www/gestorstream/backend/artisan serve --host=127.0.0.1 --port=8000
Restart=always
RestartSec=5s
StandardOutput=append:/var/log/gestorstream-backend.log
StandardError=append:/var/log/gestorstream-backend-error.log

[Install]
WantedBy=multi-user.target
EOF

# Worker
cat > /etc/systemd/system/gestorstream-worker.service << 'EOF'
[Unit]
Description=GestorStream Queue Worker
After=network.target mysql.service redis.service

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/gestorstream/backend
Environment="PATH=/usr/bin:/usr/sbin"
ExecStart=/usr/bin/php8.2 /var/www/gestorstream/backend/artisan queue:work redis --sleep=3 --tries=3 --timeout=90 --max-jobs=1000
Restart=always
RestartSec=5s
StandardOutput=append:/var/log/gestorstream-worker.log
StandardError=append:/var/log/gestorstream-worker-error.log

[Install]
WantedBy=multi-user.target
EOF

# Criar arquivos de log
touch /var/log/gestorstream-backend.log /var/log/gestorstream-backend-error.log
touch /var/log/gestorstream-worker.log /var/log/gestorstream-worker-error.log
chown www-data:www-data /var/log/gestorstream-*.log
chmod 664 /var/log/gestorstream-*.log

# Recarregar e iniciar
systemctl daemon-reload
systemctl enable gestorstream-backend gestorstream-worker
systemctl start gestorstream-backend gestorstream-worker

echo "✅ Serviços criados e iniciados"

# 5. Configurar cache
echo ""
echo "5. Configurando cache..."
cd "$BACKEND_DIR"
php artisan config:cache
php artisan route:cache
php artisan view:cache
echo "✅ Cache configurado"

# 6. Verificar frontend
echo ""
echo "6. Verificando frontend..."
if [ ! -f "$INSTALL_DIR/frontend/dist/index.html" ]; then
    echo "⚠️  Frontend não compilado. Compilando..."
    cd "$INSTALL_DIR/frontend"
    npm install --silent
    npm run build
    chown -R www-data:www-data dist/
    echo "✅ Frontend compilado"
else
    echo "✅ Frontend já compilado"
fi

# 7. Configurar cron
echo ""
echo "7. Configurando cron jobs..."
(crontab -l 2>/dev/null | grep -v "gestorstream\|schedule:run" || true; echo "* * * * * cd $BACKEND_DIR && /usr/bin/php artisan schedule:run >> $BACKEND_DIR/storage/logs/scheduler.log 2>&1") | crontab -
echo "✅ Cron configurado"

# 8. Permissões
echo ""
echo "8. Corrigindo permissões..."
chown -R www-data:www-data "$INSTALL_DIR"
chmod -R 775 "$INSTALL_DIR"
chmod +x "$BACKEND_DIR/artisan"
chmod -R 777 "$BACKEND_DIR/storage" "$BACKEND_DIR/bootstrap/cache"
echo "✅ Permissões corrigidas"

# 9. Reiniciar serviços
echo ""
echo "9. Reiniciando serviços..."
systemctl restart nginx php8.2-fpm gestorstream-backend gestorstream-worker
echo "✅ Serviços reiniciados"

# 10. Verificação final
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ CORREÇÃO CONCLUÍDA!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📊 Status dos Serviços:"
systemctl is-active nginx &> /dev/null && echo "  ✅ Nginx" || echo "  ❌ Nginx"
systemctl is-active php8.2-fpm &> /dev/null && echo "  ✅ PHP-FPM" || echo "  ❌ PHP-FPM"
systemctl is-active gestorstream-backend &> /dev/null && echo "  ✅ Backend" || echo "  ❌ Backend"
systemctl is-active gestorstream-worker &> /dev/null && echo "  ✅ Worker" || echo "  ❌ Worker"
echo ""
echo "🔍 Próximos Passos:"
echo "  1. Criar usuário admin:"
echo "     cd $BACKEND_DIR"
echo "     php artisan tinker"
echo "     # Cole: DB::table('users')->insert(['name' => 'Admin', 'email' => 'jorge@jf.eng.br', 'password' => Hash::make('senha'), 'role' => 'admin', 'email_verified_at' => now(), 'created_at' => now(), 'updated_at' => now()]);"
echo ""
echo "  2. Verificar logs se houver problemas:"
echo "     journalctl -u gestorstream-backend -f"
echo "     tail -f /var/log/nginx/error.log"
echo ""
echo "  3. Testar acesso:"
echo "     curl http://127.0.0.1:8000"
echo ""
