<?php
/**
 * buscar_notificacoes.php
 * Retorna notificações de atividades próximas em formato JSON
 */

require_once 'conexao.php';
session_start();

if (!isset($_SESSION['logado'])) {
    echo json_encode(['success' => false, 'message' => 'Não autorizado']);
    exit;
}

$tenant_id = $_SESSION['tenant_id'] ?? null;
$usuario_id = $_SESSION['usuario_id'] ?? null;

if (!$tenant_id || !$usuario_id) {
    echo json_encode(['success' => false, 'message' => 'Dados de sessão inválidos']);
    exit;
}

header('Content-Type: application/json; charset=utf-8');

try {
    // Configurar timezone
    date_default_timezone_set('America/Sao_Paulo');
    
    // VERIFICAR TIPO DE CONEXÃO
    if (isset($pdo) && $pdo instanceof PDO) {
        // CONEXÃO PDO
        $sql = "SELECT 
                    a.id,
                    a.nome,
                    a.descricao,
                    a.data_agendada,
                    a.duracao_minutos,
                    a.notificacao_minutos_antes,
                    u.nome as usuario_nome,
                    c.Nome_Cliente
                FROM atividades a 
                LEFT JOIN usuarios u ON a.usuario_id = u.id
                LEFT JOIN clientes c ON a.cliente_id = c.id
                WHERE a.ativo = 1 
                AND a.concluida = 0 
                AND a.tenant_id = ?
                AND (a.usuario_id = ? OR EXISTS (
                    SELECT 1 FROM compartilhamento_agenda ca 
                    WHERE ca.usuario_proprietario_id = a.usuario_id 
                    AND ca.usuario_compartilhado_id = ? 
                    AND ca.ativo = 1
                ))
                AND (
                    -- NOTIFICAÇÕES PROGRAMADAS (apenas nos minutos exatos configurados)
                    (
                        a.notificacao_minutos_antes > 0 
                        AND DATE_FORMAT(a.data_agendada, '%Y-%m-%d %H:%i:00') = 
                            DATE_FORMAT(DATE_ADD(NOW(), INTERVAL a.notificacao_minutos_antes MINUTE), '%Y-%m-%d %H:%i:00')
                    )
                    OR
                    -- ATIVIDADES ATRASADAS (apenas se não tiver notificação recente)
                    (
                        a.data_agendada < NOW()
                        AND a.data_agendada >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
                        AND (a.ultima_notificacao IS NULL OR a.ultima_notificacao < DATE_SUB(NOW(), INTERVAL 30 MINUTE))
                    )
                )
                ORDER BY a.data_agendada ASC";

        $stmt = $pdo->prepare($sql);
        $stmt->execute([$tenant_id, $usuario_id, $usuario_id]);
        $atividades = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
    } elseif (isset($conn) && $conn instanceof mysqli) {
        // CONEXÃO MYSQLI
        $sql = "SELECT 
                    a.id,
                    a.nome,
                    a.descricao,
                    a.data_agendada,
                    a.duracao_minutos,
                    a.notificacao_minutos_antes,
                    u.nome as usuario_nome,
                    c.Nome_Cliente
                FROM atividades a 
                LEFT JOIN usuarios u ON a.usuario_id = u.id
                LEFT JOIN clientes c ON a.cliente_id = c.id
                WHERE a.ativo = 1 
                AND a.concluida = 0 
                AND a.tenant_id = ?
                AND (a.usuario_id = ? OR EXISTS (
                    SELECT 1 FROM compartilhamento_agenda ca 
                    WHERE ca.usuario_proprietario_id = a.usuario_id 
                    AND ca.usuario_compartilhado_id = ? 
                    AND ca.ativo = 1
                ))
                AND (
                    -- NOTIFICAÇÕES PROGRAMADAS (apenas nos minutos exatos configurados)
                    (
                        a.notificacao_minutos_antes > 0 
                        AND DATE_FORMAT(a.data_agendada, '%Y-%m-%d %H:%i:00') = 
                            DATE_FORMAT(DATE_ADD(NOW(), INTERVAL a.notificacao_minutos_antes MINUTE), '%Y-%m-%d %H:%i:00')
                    )
                    OR
                    -- ATIVIDADES ATRASADAS (apenas se não tiver notificação recente)
                    (
                        a.data_agendada < NOW()
                        AND a.data_agendada >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
                        AND (a.ultima_notificacao IS NULL OR a.ultima_notificacao < DATE_SUB(NOW(), INTERVAL 30 MINUTE))
                    )
                )
                ORDER BY a.data_agendada ASC";

        $stmt = $conn->prepare($sql);
        if (!$stmt) {
            throw new Exception("Erro ao preparar consulta: " . $conn->error);
        }
        
        $stmt->bind_param("iii", $tenant_id, $usuario_id, $usuario_id);
        $stmt->execute();
        $result = $stmt->get_result();
        $atividades = [];
        
        while ($row = $result->fetch_assoc()) {
            $atividades[] = $row;
        }
        $stmt->close();
        
    } else {
        throw new Exception("Nenhuma conexão com banco de dados disponível");
    }

    // PROCESSAR NOTIFICAÇÕES
    $notificacoes = [];
    foreach ($atividades as $row) {
        $chave_notificacao = 'notif_' . $row['id'];
        $ultima_notificacao = $_SESSION[$chave_notificacao] ?? null;
        
        if (!$ultima_notificacao || (time() - $ultima_notificacao) > 1800) {
            $notificacoes[] = $row;
            $_SESSION[$chave_notificacao] = time();
            
            // Atualizar ultima_notificacao no banco
            if (isset($pdo) && $pdo instanceof PDO) {
                $update = $pdo->prepare("UPDATE atividades SET ultima_notificacao = NOW() WHERE id = ?");
                $update->execute([$row['id']]);
            } elseif (isset($conn) && $conn instanceof mysqli) {
                $update = $conn->prepare("UPDATE atividades SET ultima_notificacao = NOW() WHERE id = ?");
                $update->bind_param("i", $row['id']);
                $update->execute();
                $update->close();
            }
        }
    }

    // RETORNAR RESULTADO
    echo json_encode([
        'success' => true,
        'count' => count($notificacoes),
        'notificacoes' => $notificacoes,
        'hora_servidor' => date('H:i:s'),
        'timestamp' => time()
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    error_log("Erro em buscar_notificacoes.php: " . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'Erro ao buscar notificações: ' . $e->getMessage(),
        'notificacoes' => []
    ], JSON_UNESCAPED_UNICODE);
}

// Fechar conexão se for MySQLi
if (isset($conn) && $conn instanceof mysqli) {
    $conn->close();
}
?>