<?php
require_once 'bootstrap.php';

use Gestoreasy\Core\Http\Request;
use Gestoreasy\Core\Http\Response;
use Gestoreasy\Core\Tenant\ConnectionManager;

echo "=== Teste do Sistema de Notificações Fiscais ===\n\n";

// Simular um usuário logado
$mockUser = ['id' => 1, 'name' => 'Teste User'];

// Teste 1: Verificar se a classe FiscalNotificationService pode ser carregada
echo "1. Testando carregamento da classe FiscalNotificationService...\n";
try {
    $notificationService = new \Gestoreasy\Core\Fiscal\FiscalNotificationService();
    echo "✓ Classe carregada com sucesso\n";
} catch (\Throwable $e) {
    echo "✗ Erro ao carregar classe: " . $e->getMessage() . "\n";
    exit(1);
}

// Teste 2: Verificar conexão com banco de dados
echo "\n2. Testando conexão com banco de dados...\n";
try {
    $pdo = ConnectionManager::forTenant();
    echo "✓ Conexão estabelecida com sucesso\n";
} catch (\Throwable $e) {
    echo "✗ Erro na conexão: " . $e->getMessage() . "\n";
    exit(1);
}

// Teste 3: Criar uma notificação de teste
echo "\n3. Testando criação de notificação...\n";
try {
    $notificationService->createNotification([
        'type' => 'general_alert',
        'title' => 'Teste de Notificação',
        'message' => 'Esta é uma notificação de teste do sistema fiscal.',
        'severity' => 'high',
        'user_id' => $mockUser['id']
    ]);
    echo "✓ Notificação criada com sucesso\n";
} catch (\Throwable $e) {
    echo "✗ Erro ao criar notificação: " . $e->getMessage() . "\n";
}

// Teste 4: Listar notificações
echo "\n4. Testando listagem de notificações...\n";
try {
    $notifications = $notificationService->getUserNotifications($mockUser['id'], 'all', 10);
    echo "✓ Listagem realizada com sucesso. Total: " . count($notifications) . " notificações\n";
    
    if (!empty($notifications)) {
        $latest = $notifications[0];
        echo "  - Última notificação: {$latest['title']} (Status: {$latest['status']})\n";
    }
} catch (\Throwable $e) {
    echo "✗ Erro ao listar notificações: " . $e->getMessage() . "\n";
}

// Teste 5: Verificar configurações do usuário
echo "\n5. Testando configurações do usuário...\n";
try {
    $settings = $notificationService->getUserSettings($mockUser['id']);
    echo "✓ Configurações obtidas com sucesso\n";
    $emailEnabled = isset($settings['email_enabled']) ? (bool)$settings['email_enabled'] : false;
    $browserEnabled = isset($settings['browser_enabled']) ? (bool)$settings['browser_enabled'] : false;
    echo "  - Email habilitado: " . ($emailEnabled ? 'Sim' : 'Não') . "\n";
    echo "  - Browser habilitado: " . ($browserEnabled ? 'Sim' : 'Não') . "\n";
} catch (\Throwable $e) {
    echo "✗ Erro ao obter configurações: " . $e->getMessage() . "\n";
}

// Teste 6: Simular endpoint de listagem
echo "\n6. Testando endpoint de listagem via simulação...\n";
try {
    // Simular request
    $mockRequest = new class {
        public $user = ['id' => 1];
        public $query = ['status' => 'all', 'limit' => '10'];
    };
    
    // Simular o código do endpoint
    $userId = $mockRequest->user['id'];
    $status = $mockRequest->query['status'] ?? 'all';
    $limit = min((int)($mockRequest->query['limit'] ?? 50), 100);
    
    $notifications = $notificationService->getUserNotifications($userId, $status, $limit);
    
    echo "✓ Endpoint simulado com sucesso\n";
    echo "  - Parâmetros: status={$status}, limit={$limit}\n";
    echo "  - Resultado: " . count($notifications) . " notificações\n";
} catch (\Throwable $e) {
    echo "✗ Erro no endpoint simulado: " . $e->getMessage() . "\n";
}

echo "\n=== Teste Concluído ===\n";