<?php
session_start();
require_once 'conexao.php';

header('Content-Type: application/json');
header('Cache-Control: no-cache, must-revalidate');

// Verificar se o usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    echo json_encode(['success' => false, 'message' => 'Não autenticado']);
    exit;
}

$tenant_id = $_SESSION['tenant_id'] ?? 1;
$usuario_id = $_SESSION['usuario_id'] ?? $_SESSION['user_id'] ?? 1;

try {
    // Verificar/criar tabela notificacoes
    $conn->query("CREATE TABLE IF NOT EXISTS notificacoes (
        id INT PRIMARY KEY AUTO_INCREMENT,
        usuario_id INT NOT NULL,
        tenant_id INT NOT NULL,
        titulo VARCHAR(255) NOT NULL,
        mensagem TEXT,
        tipo VARCHAR(20) DEFAULT 'info',
        atividade_id INT,
        url VARCHAR(500),
        icone VARCHAR(50),
        visualizada ENUM('sim', 'nao') DEFAULT 'nao',
        data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        data_visualizacao TIMESTAMP NULL,
        data_expiracao DATE NULL,
        INDEX idx_usuario_tenant (usuario_id, tenant_id),
        INDEX idx_visualizada (visualizada),
        INDEX idx_data_criacao (data_criacao)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
    
    // VERIFICAR SE JÁ CRIOU NOTIFICAÇÕES DE EXEMPLO PARA ESTE USUÁRIO
    // Usamos uma flag na sessão para evitar criar toda vez
    if (!isset($_SESSION['notificacoes_exemplo_criadas'])) {
        // Verificar se já existem notificações de exemplo
        $check = $conn->prepare("SELECT COUNT(*) as total FROM notificacoes 
                               WHERE usuario_id = ? AND tenant_id = ? 
                               AND titulo LIKE '%SON%'");
        $check->bind_param("ii", $usuario_id, $tenant_id);
        $check->execute();
        $result = $check->get_result();
        $row = $result->fetch_assoc();
        $totalExemplos = $row['total'] ?? 0;
        $check->close();
        
        // Se não tiver notificações de exemplo, criar apenas uma vez
        if ($totalExemplos === 0) {
            $exemplos = [
                ['Bem-vindo ao SON!', 'Sistema de notificações ativado com sucesso.', 'sucesso'],
                ['Nova funcionalidade', 'O sistema de notificações agora está disponível.', 'info'],
                ['Dica do sistema', 'Clique no sino para gerenciar suas notificações.', 'info']
            ];
            
            foreach ($exemplos as $exemplo) {
                $titulo = $conn->real_escape_string($exemplo[0]);
                $mensagem = $conn->real_escape_string($exemplo[1]);
                $tipo = $conn->real_escape_string($exemplo[2]);
                
                $conn->query("INSERT INTO notificacoes (usuario_id, tenant_id, titulo, mensagem, tipo) 
                             VALUES ($usuario_id, $tenant_id, '$titulo', '$mensagem', '$tipo')");
            }
        }
        
        $_SESSION['notificacoes_exemplo_criadas'] = true;
    }
    
    // Buscar notificações não visualizadas
    // CORREÇÃO: Buscar hora da atividade usando função MySQL
    $sql = "SELECT 
                n.*, 
                a.nome as atividade_nome, 
                a.data_agendada,
                a.duracao_minutos,
                c.Nome_Cliente,
                DATE_FORMAT(a.data_agendada, '%H:%i') as hora_agendada,
                DATE(a.data_agendada) as data_agendada_formatada
            FROM notificacoes n
            LEFT JOIN atividades a ON n.atividade_id = a.id
            LEFT JOIN clientes c ON a.cliente_id = c.id
            WHERE n.usuario_id = ? 
            AND n.tenant_id = ?
            AND n.visualizada = 'nao'
            AND (n.data_expiracao IS NULL OR n.data_expiracao >= CURDATE())
            ORDER BY 
                CASE 
                    WHEN n.tipo = 'alerta' THEN 1
                    WHEN n.tipo = 'atividade' THEN 2
                    WHEN n.tipo = 'lembrete' THEN 3
                    ELSE 4
                END,
                n.data_criacao DESC
            LIMIT 20";
    
    $stmt = $conn->prepare($sql);
    $notificacoes = [];
    
    if ($stmt) {
        $stmt->bind_param("ii", $usuario_id, $tenant_id);
        $stmt->execute();
        $result = $stmt->get_result();
        
        while ($row = $result->fetch_assoc()) {
            $notificacoes[] = [
                'id' => $row['id'],
                'titulo' => $row['titulo'] ?: 'Notificação',
                'mensagem' => $row['mensagem'] ?: '',
                'tipo' => $row['tipo'] ?: 'info',
                'atividade_id' => $row['atividade_id'],
                'atividade_nome' => $row['atividade_nome'] ?: null,
                'data_agendada' => $row['data_agendada'] ?: null,
                'hora_agendada' => $row['hora_agendada'] ?: null,
                'data_agendada_formatada' => $row['data_agendada_formatada'] ?: null,
                'duracao_minutos' => $row['duracao_minutos'] ?: null,
                'Nome_Cliente' => $row['Nome_Cliente'] ?: null,
                'data_criacao' => $row['data_criacao'],
                'visualizada' => $row['visualizada'],
                'url' => $row['url'] ?: null
            ];
        }
        $stmt->close();
    }
    
    // Contar total não lidas
    $sqlCount = "SELECT COUNT(*) as total FROM notificacoes 
                 WHERE usuario_id = ? 
                 AND tenant_id = ?
                 AND visualizada = 'nao'
                 AND (data_expiracao IS NULL OR data_expiracao >= CURDATE())";
    
    $stmt = $conn->prepare($sqlCount);
    $totalNaoLidas = 0;
    
    if ($stmt) {
        $stmt->bind_param("ii", $usuario_id, $tenant_id);
        $stmt->execute();
        $result = $stmt->get_result();
        $row = $result->fetch_assoc();
        $totalNaoLidas = $row['total'] ?? 0;
        $stmt->close();
    }
    
    // Se não houver notificações de atividades, tentar gerar algumas
    if ($totalNaoLidas === 0 && !isset($_SESSION['tentou_gerar_atividades'])) {
        // Verificar se há atividades próximas sem notificação
        $sqlAtividades = "SELECT COUNT(*) as total FROM atividades 
                         WHERE usuario_responsavel = ? 
                         AND tenant_id = ?
                         AND data_agendada BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 DAY)
                         AND status NOT IN ('concluido', 'cancelado')
                         AND ativo = 1";
        
        $stmt = $conn->prepare($sqlAtividades);
        if ($stmt) {
            $stmt->bind_param("ii", $usuario_id, $tenant_id);
            $stmt->execute();
            $result = $stmt->get_result();
            $row = $result->fetch_assoc();
            $totalAtividades = $row['total'] ?? 0;
            $stmt->close();
            
            if ($totalAtividades > 0) {
                // Chamar o gerador de notificações de atividades
                $url = "gerar_notificacoes_atividades.php?usuario=" . $usuario_id;
                $context = stream_context_create(['http' => ['timeout' => 5]]);
                @file_get_contents($url, false, $context);
                
                // Tentar buscar novamente
                if ($stmt = $conn->prepare($sql)) {
                    $stmt->bind_param("ii", $usuario_id, $tenant_id);
                    $stmt->execute();
                    $result = $stmt->get_result();
                    
                    $notificacoes = [];
                    while ($row = $result->fetch_assoc()) {
                        $notificacoes[] = [
                            'id' => $row['id'],
                            'titulo' => $row['titulo'] ?: 'Notificação',
                            'mensagem' => $row['mensagem'] ?: '',
                            'tipo' => $row['tipo'] ?: 'info',
                            'atividade_id' => $row['atividade_id'],
                            'atividade_nome' => $row['atividade_nome'] ?: null,
                            'data_agendada' => $row['data_agendada'] ?: null,
                            'hora_agendada' => $row['hora_agendada'] ?: null,
                            'data_agendada_formatada' => $row['data_agendada_formatada'] ?: null,
                            'duracao_minutos' => $row['duracao_minutos'] ?: null,
                            'Nome_Cliente' => $row['Nome_Cliente'] ?: null,
                            'data_criacao' => $row['data_criacao'],
                            'visualizada' => $row['visualizada'],
                            'url' => $row['url'] ?: null
                        ];
                    }
                    $stmt->close();
                }
                
                // Recontar
                if ($stmt = $conn->prepare($sqlCount)) {
                    $stmt->bind_param("ii", $usuario_id, $tenant_id);
                    $stmt->execute();
                    $result = $stmt->get_result();
                    $row = $result->fetch_assoc();
                    $totalNaoLidas = $row['total'] ?? 0;
                    $stmt->close();
                }
            }
        }
        
        $_SESSION['tentou_gerar_atividades'] = true;
    }
    
    echo json_encode([
        'success' => true,
        'notificacoes' => $notificacoes,
        'total_nao_lidas' => $totalNaoLidas,
        'timestamp' => time()
    ]);
    
} catch (Exception $e) {
    error_log('Erro notificacoes_sistema.php: ' . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno',
        'notificacoes' => [],
        'total_nao_lidas' => 0
    ]);
}