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

header('Content-Type: application/json');

// Verificar se está autorizado (admin ou execução automática)
$autorizado = false;

if (isset($_SESSION['logado']) && $_SESSION['logado'] === true && 
    in_array($_SESSION['permissao'], ['admin', 'super_admin'])) {
    $autorizado = true;
}

// Também permitir execução via CLI (para cron jobs)
if (php_sapi_name() === 'cli') {
    $autorizado = true;
}

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

try {
    // Primeiro, verificar se a tabela de notificações existe
    $checkTable = $conn->query("SHOW TABLES LIKE 'notificacoes'");
    if ($checkTable->num_rows === 0) {
        // Criar tabela se não existir
        $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");
    }
    
    // Buscar atividades dos próximos 3 dias que ainda não têm notificação
    // CORREÇÃO: Não usar hora_agendada separada, extrair da data_agendada
    $sql = "
        SELECT 
            a.id as atividade_id,
            a.nome,
            a.data_agendada,
            a.usuario_responsavel,
            a.tenant_id,
            c.nome as cliente_nome,
            u.email as usuario_email,
            u.nome as usuario_nome,
            a.duracao_minutos
        FROM atividades a
        LEFT JOIN clientes c ON a.cliente_id = c.id
        LEFT JOIN usuarios u ON a.usuario_responsavel = u.id
        WHERE a.data_agendada BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 DAY)
        AND a.status NOT IN ('concluido', 'cancelado')
        AND a.ativo = 1
        AND NOT EXISTS (
            SELECT 1 FROM notificacoes n 
            WHERE n.atividade_id = a.id 
            AND n.usuario_id = a.usuario_responsavel
            AND n.tenant_id = a.tenant_id
            AND (n.data_expiracao IS NULL OR n.data_expiracao >= CURDATE())
        )
        ORDER BY a.data_agendada
    ";
    
    $result = $conn->query($sql);
    $notificacoesGeradas = 0;
    
    while ($atividade = $result->fetch_assoc()) {
        // Extrair hora da data_agendada (formato: YYYY-MM-DD HH:MM:SS)
        $dataHora = new DateTime($atividade['data_agendada']);
        $hora = $dataHora->format('H:i');
        $data = $dataHora->format('Y-m-d');
        
        // Calcular dias até a atividade
        $hoje = new DateTime();
        $intervalo = $hoje->diff($dataHora);
        $dias = $intervalo->days;
        
        // Definir tipo e mensagem baseado na proximidade
        if ($intervalo->invert == 1) {
            // Já passou (atrasada)
            $titulo = "🔴 ATENÇÃO: Atividade ATRASADA - " . substr($atividade['nome'], 0, 50);
            $mensagem = "Era para " . $dataHora->format('d/m H:i');
            if ($atividade['cliente_nome']) {
                $mensagem .= " - " . $atividade['cliente_nome'];
            }
            $tipo = 'alerta';
            $icone = 'fa-exclamation-triangle';
            $dataExpiracao = date('Y-m-d'); // Expira hoje
        } elseif ($dias === 0) {
            // Para hoje
            $titulo = "📅 Atividade para HOJE: " . substr($atividade['nome'], 0, 50);
            $mensagem = "Hoje às " . $hora;
            if ($atividade['cliente_nome']) {
                $mensagem .= " com " . $atividade['cliente_nome'];
            }
            if ($atividade['duracao_minutos']) {
                $duracao = formatarDuracao($atividade['duracao_minutos']);
                $mensagem .= " (" . $duracao . ")";
            }
            $tipo = 'alerta';
            $icone = 'fa-exclamation-triangle';
            $dataExpiracao = $data; // Expira no dia da atividade
        } elseif ($dias === 1) {
            // Para amanhã
            $titulo = "📅 Atividade para AMANHÃ: " . substr($atividade['nome'], 0, 50);
            $mensagem = "Amanhã às " . $hora;
            if ($atividade['cliente_nome']) {
                $mensagem .= " com " . $atividade['cliente_nome'];
            }
            if ($atividade['duracao_minutos']) {
                $duracao = formatarDuracao($atividade['duracao_minutos']);
                $mensagem .= " (" . $duracao . ")";
            }
            $tipo = 'lembrete';
            $icone = 'fa-clock';
            $dataExpiracao = $data;
        } else {
            // Para depois de amanhã
            $titulo = "📅 Atividade agendada: " . substr($atividade['nome'], 0, 50);
            $dataFormatada = $dataHora->format('d/m');
            $mensagem = $dataFormatada . " às " . $hora;
            if ($atividade['cliente_nome']) {
                $mensagem .= " - " . $atividade['cliente_nome'];
            }
            if ($atividade['duracao_minutos']) {
                $duracao = formatarDuracao($atividade['duracao_minutos']);
                $mensagem .= " (" . $duracao . ")";
            }
            $tipo = 'atividade';
            $icone = 'fa-calendar';
            $dataExpiracao = $data;
        }
        
        // Inserir notificação
        $insert = $conn->prepare("INSERT INTO notificacoes 
            (usuario_id, tenant_id, titulo, mensagem, tipo, atividade_id, icone, data_expiracao) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
        
        $insert->bind_param(
            "iisssiss",
            $atividade['usuario_responsavel'],
            $atividade['tenant_id'],
            $titulo,
            $mensagem,
            $tipo,
            $atividade['atividade_id'],
            $icone,
            $dataExpiracao
        );
        
        if ($insert->execute()) {
            $notificacoesGeradas++;
            
            // Opcional: Enviar e-mail de notificação
            if ($atividade['usuario_email'] && ($tipo === 'alerta' || $dias <= 1)) {
                enviarEmailNotificacao(
                    $atividade['usuario_email'],
                    $titulo,
                    $mensagem,
                    $atividade['tenant_id']
                );
            }
        }
        
        $insert->close();
    }
    
    echo json_encode([
        'success' => true,
        'geradas' => $notificacoesGeradas,
        'message' => "Foram geradas $notificacoesGeradas notificações de atividades"
    ]);
    
} catch (Exception $e) {
    error_log('Erro gerar_notificacoes_atividades.php: ' . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'Erro interno: ' . $e->getMessage(),
        'geradas' => 0
    ]);
}

// Função para formatar duração
function formatarDuracao($minutos) {
    if ($minutos < 60) {
        return $minutos . ' min';
    } else {
        $horas = floor($minutos / 60);
        $minutos_restantes = $minutos % 60;
        if ($minutos_restantes == 0) {
            return $horas . 'h';
        } else {
            return $horas . 'h' . $minutos_restantes . 'min';
        }
    }
}

// Função para enviar e-mail de notificação
function enviarEmailNotificacao($destinatario, $assunto, $mensagem, $tenant_id) {
    $configs = [
        1 => [
            'from_email' => 'sistema@empresa1.com',
            'from_name' => 'Sistema Empresa 1'
        ],
        2 => [
            'from_email' => 'sistema@empresa2.com',
            'from_name' => 'Sistema Empresa 2'
        ]
    ];
    
    $config = $configs[$tenant_id] ?? [
        'from_email' => 'sistema@son.com',
        'from_name' => 'SON Sistema'
    ];
    
    $headers = "From: {$config['from_name']} <{$config['from_email']}>\r\n";
    $headers .= "Reply-To: {$config['from_email']}\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    
    // Template HTML básico
    $htmlMessage = "
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; margin: 20px; }
                .container { max-width: 600px; margin: 0 auto; border: 1px solid #ddd; border-radius: 8px; padding: 20px; }
                .header { background: #f8f9fa; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
                .content { margin: 15px 0; }
                .btn { display: inline-block; padding: 10px 20px; background: #007bff; color: white; text-decoration: none; border-radius: 4px; }
            </style>
        </head>
        <body>
            <div class='container'>
                <div class='header'>
                    <h2>🔔 Notificação de Atividade</h2>
                </div>
                <div class='content'>
                    <h3>{$assunto}</h3>
                    <p>" . nl2br(htmlspecialchars($mensagem)) . "</p>
                </div>
                <br>
                <a href='https://seusite.com/calendario.php' class='btn'>📅 Acessar Calendário</a>
            </div>
        </body>
        </html>
    ";
    
    return mail($destinatario, $assunto, $htmlMessage, $headers);
}