#!/bin/bash

# Script para corrigir a função de exclusão de usuários
# Execute no servidor: bash fix_user_delete.sh

echo "🔧 Aplicando correção para exclusão de usuários..."

# Definir diretório da aplicação
APP_DIR="/var/www/gestorstream"

if [ ! -d "$APP_DIR" ]; then
    echo "❌ Erro: Diretório $APP_DIR não encontrado"
    exit 1
fi

cd "$APP_DIR"

# Verificar se o usuário tem permissão
if [ "$EUID" -ne 0 ]; then 
    echo "⚠️  Execute como root ou com sudo"
    exit 1
fi

# Fazer backup do arquivo original
echo "📦 Fazendo backup do arquivo original..."
cp backend/app/Http/Controllers/Api/AdminUserController.php backend/app/Http/Controllers/Api/AdminUserController.php.backup.$(date +%Y%m%d_%H%M%S)

# Aplicar correção via git pull (se houver commits novos)
echo "📥 Verificando atualizações no repositório..."
git fetch origin main

# Verificar se há diferenças
if git diff --quiet HEAD origin/main; then
    echo "ℹ️  Código já está atualizado. Aplicando correção manual..."
    
    # Criar arquivo temporário com a correção
    cat > /tmp/fix_admin_user_controller.patch << 'PATCH_EOF'
--- a/backend/app/Http/Controllers/Api/AdminUserController.php
+++ b/backend/app/Http/Controllers/Api/AdminUserController.php
@@ -166,8 +166,11 @@ class AdminUserController extends Controller
 
         $userData = $user->only(['id', 'name', 'email', 'role']);
 
-        // Excluir instâncias do WhatsApp associadas ao usuário
+        try {
+            DB::beginTransaction();
+
+            // 1. Excluir instâncias do WhatsApp associadas ao usuário
             $connections = WhatsAppConnection::where('user_id', $user->id)->get();
             
             foreach ($connections as $connection) {
@@ -197,21 +200,100 @@ class AdminUserController extends Controller
                             'instance_name' => $connection->instance_name,
                         ]);
                     }
+                    
+                    // Decrementar contador da integração
+                    if ($integration->current_users > 0) {
+                        $integration->decrement('current_users');
+                    }
                 }
             } catch (\Exception $e) {
                 Log::error("Error deleting WhatsApp instance for user {$user->id}: " . $e->getMessage(), [
                     'user_id' => $user->id,
                     'connection_id' => $connection->id,
                     'exception' => $e,
                 ]);
             }
+            
+            // Deletar conexão do banco
+            $connection->delete();
         }
 
-        AuditLog::log('admin_user_deleted', $request->user(), null, [
+            // 2. Excluir servidores do usuário
+            $user->servers()->delete();
+
+            // 3. Excluir clientes do usuário
+            $user->clients()->delete();
+
+            // 4. Excluir recargas do usuário
+            $user->recharges()->delete();
+
+            // 5. Excluir notificações do usuário
+            $user->notifications()->delete();
+
+            // 6. Excluir configurações de notificações
+            if ($user->notificationSettings) {
+                $user->notificationSettings->delete();
+            }
+
+            // 7. Excluir pagamentos do usuário
+            $user->payments()->delete();
+
+            // 8. Excluir assinaturas do usuário
+            $user->subscriptions()->delete();
+
+            // 9. Remover referências de afiliado (se houver)
+            // Atualizar usuários que foram referidos por este usuário
+            User::where('referred_by', $user->id)->update(['referred_by' => null]);
+            
+            // Excluir registro de referral do afiliado
+            if ($user->referralRecord) {
+                $user->referralRecord->delete();
+            }
+
+            // 10. Excluir tickets de suporte do usuário
+            DB::table('support_tickets')->where('user_id', $user->id)->delete();
+            DB::table('support_tickets')->where('assigned_to', $user->id)->update(['assigned_to' => null]);
+
+            // 11. Excluir tokens de API pessoais
+            $user->tokens()->delete();
+
+            // 12. Registrar log de auditoria antes de deletar o usuário
+            // (não podemos fazer depois porque o usuário já não existe)
+            AuditLog::log('admin_user_deleted', $request->user(), null, [
             'deleted_user' => $userData,
         ]);
 
-        $user->delete();
+            // 13. Finalmente, excluir o usuário
+            // Os audit logs do usuário serão mantidos para histórico
+            // (eles têm o user_id, mas não foreign key constraint)
+            $user->delete();
+
+            DB::commit();
+
+            Log::info("User deleted successfully by admin", [
+                'deleted_user_id' => $userData['id'],
+                'deleted_user_email' => $userData['email'],
+                'admin_id' => $request->user()->id,
+                'admin_email' => $request->user()->email,
+            ]);
 
         return response()->json([
             'message' => 'User deleted successfully',
         ]);
+
+        } catch (\Exception $e) {
+            DB::rollBack();
+            
+            Log::error("Error deleting user {$user->id}: " . $e->getMessage(), [
+                'user_id' => $user->id,
+                'user_email' => $user->email,
+                'admin_id' => $request->user()->id,
+                'exception' => $e->getMessage(),
+                'trace' => $e->getTraceAsString(),
+            ]);
+
+            return response()->json([
+                'message' => 'Error deleting user',
+                'error' => config('app.debug') ? $e->getMessage() : 'Internal server error',
+            ], 500);
+        }
     }
PATCH_EOF
    
    # Aplicar patch
    echo "🔧 Aplicando correção..."
    cd backend && patch -p2 < /tmp/fix_admin_user_controller.patch
    
    if [ $? -eq 0 ]; then
        echo "✅ Correção aplicada com sucesso!"
    else
        echo "❌ Erro ao aplicar correção. Verifique manualmente."
        echo "ℹ️  Backup salvo em: backend/app/Http/Controllers/Api/AdminUserController.php.backup.*"
        exit 1
    fi
else
    echo "📥 Atualizando código do repositório..."
    sudo -u www-data git pull origin main
    
    if [ $? -eq 0 ]; then
        echo "✅ Código atualizado com sucesso!"
    else
        echo "❌ Erro ao atualizar código"
        exit 1
    fi
fi

# Limpar cache do Laravel
echo "🧹 Limpando cache..."
cd "$APP_DIR/backend"
sudo -u www-data php artisan config:clear
sudo -u www-data php artisan cache:clear
sudo -u www-data php artisan route:clear
sudo -u www-data php artisan view:clear

# Otimizar
sudo -u www-data php artisan config:cache
sudo -u www-data php artisan route:cache

echo ""
echo "✅ Correção aplicada com sucesso!"
echo "ℹ️  Logs do Laravel: $APP_DIR/backend/storage/logs/laravel.log"
echo ""
echo "🧪 Teste agora tentando excluir o usuário novamente."
