<?php
/**
 * API Simplificada para Notificações
 */

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
header('Access-Control-Allow-Headers: Content-Type');

// Configuração básica de conexão
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

// Função para conectar ao banco
function getConnection() {
    global $host, $dbname, $username, $password;
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (Exception $e) {
        return null;
    }
}

// Função para enviar resposta de sucesso
function sendSuccess($data, $message = 'Sucesso') {
    echo json_encode([
        'success' => true,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message,
        'data' => $data
    ]);
    exit;
}

// Função para enviar resposta de erro
function sendError($message, $code = 400) {
    http_response_code($code);
    echo json_encode([
        'success' => false,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message
    ]);
    exit;
}

try {
    // Conectar ao banco
    $pdo = getConnection();
    if (!$pdo) {
        sendError('Erro de conexão com banco de dados', 500);
    }

    // Verificar método HTTP
    if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
        sendError('Método não permitido', 405);
    }

    // Obter ação e parâmetros
    $acao = $_GET['acao'] ?? 'nao_lidas';
    $userId = $_GET['user_id'] ?? null;
    
    if (!$userId) {
        sendError('ID do usuário é obrigatório', 400);
    }

    // DEBUG: Log da consulta
    error_log("DEBUG: Buscando notificações para user_id: $userId, ação: $acao");
    
    if ($acao === 'nao_lidas') {
        // Buscar notificações não lidas
        $sql = "SELECT 
                    n.id,
                    n.user_id,
                    n.tipo,
                    n.titulo,
                    n.mensagem,
                    n.lida,
                    n.created_at as data_envio,
                    COALESCE(n.viagem_id, 0) as viagem_id,
                    COALESCE(n.solicitacao_id, 0) as solicitacao_id
                FROM notificacoes_push n
                WHERE n.user_id = ? AND n.lida = FALSE
                ORDER BY n.created_at DESC
                LIMIT 20";

        $stmt = $pdo->prepare($sql);
        $stmt->execute([$userId]);
        $notificacoes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // DEBUG: Log dos resultados
        error_log("DEBUG: Encontradas " . count($notificacoes) . " notificações não lidas");
        
        // Converter para o formato esperado pelo Android
        $notificacoesFormatadas = [];
        foreach ($notificacoes as $notificacao) {
            $notificacoesFormatadas[] = [
                'id' => (int)$notificacao['id'],
                'tipo' => $notificacao['tipo'],
                'titulo' => $notificacao['titulo'],
                'mensagem' => $notificacao['mensagem'],
                'lida' => (bool)$notificacao['lida'],
                'dataEnvio' => $notificacao['data_envio'],
                'viagemId' => (int)$notificacao['viagem_id']
            ];
        }
        
        sendSuccess([
            'notificacoes' => $notificacoesFormatadas,
            'total' => count($notificacoesFormatadas)
        ]);
        
    } elseif ($acao === 'contar') {
        // Contar notificações não lidas
        $sql = "SELECT 
                    COUNT(*) as total_nao_lidas,
                    COUNT(CASE WHEN tipo = 'solicitacao_viagem' THEN 1 END) as solicitacoes_pendentes,
                    COUNT(CASE WHEN tipo = 'aprovacao_viagem' THEN 1 END) as aprovacoes,
                    COUNT(CASE WHEN tipo = 'negacao_viagem' THEN 1 END) as negacoes
                FROM notificacoes_push 
                WHERE user_id = ? AND lida = FALSE";

        $stmt = $pdo->prepare($sql);
        $stmt->execute([$userId]);
        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
        
        sendSuccess([
            'totalNaoLidas' => (int)$resultado['total_nao_lidas'],
            'solicitacoesPendentes' => (int)$resultado['solicitacoes_pendentes'],
            'aprovacoes' => (int)$resultado['aprovacoes'],
            'negacoes' => (int)$resultado['negacoes']
        ]);
        
    } else {
        sendError('Ação não reconhecida', 400);
    }

} catch (Exception $e) {
    error_log("Erro no endpoint de notificações: " . $e->getMessage());
    sendError('Erro interno: ' . $e->getMessage(), 500);
}
?>