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

if (!isset($_SESSION['logado'])) {
    header('Location: login.php');
    exit;
}

// Verifica o token CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    $_SESSION['erro'] = 'Token CSRF inválido';
    header('Location: calendario.php');
    exit;
}

$tenant_id = $_SESSION['tenant_id'];
$usuario_id = $_SESSION['usuario_id'];
$nome_usuario = $_SESSION['nome_usuario'] ?? 'Usuário';

// FUNÇÃO DE ENVIO DE E-MAIL COM SENDGRID (MESMA DOS OUTROS ARQUIVOS)
function enviarEmailNotificacao($destinatario, $assunto, $mensagem, $tenant_id) {
    try {
        $sendgrid_api_key = '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';
        
        if (empty($sendgrid_api_key) || strlen($sendgrid_api_key) < 20) {
            error_log("❌ API Key do SendGrid não configurada ou inválida");
            return false;
        }
        
        $emailRemetenteVerificado = 'sistema@notificacaoson.tvitecnologia.com.br';
        $nomeRemetenteVerificado = 'Sistema SON';
        
        $configs = [
            1 => ['from_name' => 'Sistema Empresa 1'],
            2 => ['from_name' => 'Sistema Empresa 2']
        ];
        
        $config = $configs[$tenant_id] ?? ['from_name' => 'SON Sistema'];
        $nomeRemetenteVerificado = $config['from_name'];
        
        if (!filter_var($destinatario, FILTER_VALIDATE_EMAIL)) {
            error_log("❌ E-mail do destinatário inválido: $destinatario");
            return false;
        }
        
        $url = 'https://api.sendgrid.com/v3/mail/send';
        
        $data = [
            'personalizations' => [
                [
                    'to' => [
                        [
                            'email' => $destinatario,
                            'name' => 'Usuário'
                        ]
                    ],
                    'subject' => $assunto
                ]
            ],
            'from' => [
                'email' => $emailRemetenteVerificado,
                'name' => $nomeRemetenteVerificado
            ],
            'content' => [
                [
                    'type' => 'text/html',
                    'value' => $mensagem
                ]
            ]
        ];
        
        error_log("📤 SALVAR_ATIVIDADE.PHP - Enviando email via SendGrid para: $destinatario");
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Bearer ' . $sendgrid_api_key,
            'Content-Type: ' . 'application/json',
        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        
        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curl_error = curl_error($ch);
        $curl_errno = curl_errno($ch);
        
        curl_close($ch);
        
        if ($curl_errno) {
            error_log("❌ SALVAR_ATIVIDADE.PHP - Erro cURL: $curl_error");
            return false;
        }
        
        if ($http_code === 202) {
            error_log("✅ SALVAR_ATIVIDADE.PHP - Email ACEITO para entrega");
            return true;
        } else {
            error_log("❌ SALVAR_ATIVIDADE.PHP - Falha no envio - HTTP: $http_code");
            return false;
        }
        
    } catch (Exception $e) {
        error_log("❌ SALVAR_ATIVIDADE.PHP - Exceção: " . $e->getMessage());
        return false;
    }
}

// FUNÇÃO PARA CRIAR TEMPLATE DE E-MAIL
function criarTemplateNotificacao($atividade, $tipo = 'nova') {
    $dataHora = date('d/m/Y H:i', strtotime($atividade['data_agendada']));
    
    // Calcular data de término se houver duração
    $dataTermino = '';
    if (!empty($atividade['duracao_minutos']) && $atividade['duracao_minutos'] > 0) {
        $dataTerminoObj = new DateTime($atividade['data_agendada']);
        $dataTerminoObj->add(new DateInterval('PT' . $atividade['duracao_minutos'] . 'M'));
        $dataTermino = $dataTerminoObj->format('d/m/Y H:i');
    }
    
    $templates = [
        'nova' => "
            <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: #e3f2fd; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
                    .info { margin: 10px 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>📅 Nova Atividade Criada</h2>
                    </div>
                    <div class='info'><strong>📋 Atividade:</strong> {$atividade['nome']}</div>
                    <div class='info'><strong>📅 Início:</strong> $dataHora</div>
                    " . ($dataTermino ? "<div class='info'><strong>⏰ Término:</strong> $dataTermino</div>" : "") .
                    ($atividade['duracao_minutos'] ? "<div class='info'><strong>⏱️ Duração:</strong> " . formatarDuracao($atividade['duracao_minutos']) . "</div>" : "") . "
                    " . ($atividade['descricao'] ? "<div class='info'><strong>📝 Descrição:</strong> {$atividade['descricao']}</div>" : "") . "
                    " . ($atividade['Nome_Cliente'] ? "<div class='info'><strong>👤 Cliente:</strong> {$atividade['Nome_Cliente']}</div>" : "") . "
                    " . ($atividade['tipo_atividade'] ? "<div class='info'><strong>📊 Tipo de Atividade:</strong> {$atividade['tipo_atividade']}</div>" : "") . "
                    <div class='info'><strong>👨‍💼 Responsável:</strong> {$atividade['usuario_nome']}</div>
                    <br>
                    <a href='https://son.tvitecnologia.com.br/calendario.php' class='btn'>📅 Acessar Calendário</a>
                </div>
            </body>
            </html>
        "
    ];
    
    return $templates[$tipo] ?? $templates['nova'];
}

// FUNÇÃO AUXILIAR PARA FORMATAR DURAÇÃO
function formatarDuracao($minutos) {
    if ($minutos < 60) {
        return $minutos . ' minutos';
    } else {
        $horas = floor($minutos / 60);
        $minutos_restantes = $minutos % 60;
        if ($minutos_restantes == 0) {
            return $horas . ' hora' . ($horas > 1 ? 's' : '');
        } else {
            return $horas . 'h' . $minutos_restantes . 'min';
        }
    }
}

// Coletar dados do formulário
$nome = $_POST['nome'] ?? '';
$descricao = $_POST['descricao'] ?? '';
$data_agendada = $_POST['data_agendada'] ?? '';
$hora = $_POST['hora'] ?? '';
$notificacao_minutos_antes = $_POST['notificar'] ?? 0;
$cliente_id = $_POST['cliente_id'] ?? null;
$lista_atividade_id = $_POST['lista_atividade_id'] ?? null;
$duracao_minutos = $_POST['duracao_minutos'] ?? 30;
$enviar_email = $_POST['enviar_email'] ?? 0;

// Validações básicas
if (empty($nome) || empty($data_agendada) || empty($hora)) {
    $_SESSION['erro'] = 'Nome, data e hora são obrigatórios';
    header('Location: calendario.php');
    exit;
}

// Combinar data e hora
$data_hora = $data_agendada . ' ' . $hora . ':00';

// Validar data/hora
if (strtotime($data_hora) === false) {
    $_SESSION['erro'] = 'Data/hora inválida';
    header('Location: calendario.php');
    exit;
}

// Validar duração
if (!is_numeric($duracao_minutos) || $duracao_minutos < 5 || $duracao_minutos > 1440) {
    $_SESSION['erro'] = 'Duração deve ser entre 5 e 1440 minutos';
    header('Location: calendario.php');
    exit;
}

// Converter para NULL se estiver vazio
if ($cliente_id === '') {
    $cliente_id = null;
}
if ($lista_atividade_id === '') {
    $lista_atividade_id = null;
}

// Inserir no banco de dados
$sql = "INSERT INTO atividades (nome, descricao, data_agendada, notificacao_minutos_antes, cliente_id, lista_atividade_id, usuario_id, tenant_id, ativo, concluida, duracao_minutos) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0, ?)";

$stmt = $conn->prepare($sql);
$stmt->bind_param("sssiiiiii", $nome, $descricao, $data_hora, $notificacao_minutos_antes, $cliente_id, $lista_atividade_id, $usuario_id, $tenant_id, $duracao_minutos);

if ($stmt->execute()) {
    $nova_atividade_id = $stmt->insert_id;
    
    // ✅ 1. REGISTRAR LOG DA CRIAÇÃO DA ATIVIDADE
    $acao = 'Atividade Agendada';
    $detalhes = "Nova atividade criada: " . $nome . " (ID: " . $nova_atividade_id . ")";
    
    $sql_log = "INSERT INTO cliente_logs (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id, atividade_id, observacao_id) 
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
    $stmt_log = $conn->prepare($sql_log);
    $cliente_id_log = $cliente_id ?? 0;
    $observacao_id_log = 0;
    $stmt_log->bind_param("iisssiii", $cliente_id_log, $usuario_id, $nome_usuario, $acao, $detalhes, $tenant_id, $nova_atividade_id, $observacao_id_log);
    $stmt_log->execute();
    $stmt_log->close();
    
    // ✅ 2. REGISTRAR NA TIMELINE SE HOUVER CLIENTE
    if ($cliente_id && is_numeric($cliente_id)) {
        $detalhes_timeline = "Nova atividade criada: " . $nome;
        if (!empty($descricao)) {
            $detalhes_timeline .= " - " . $descricao;
        }
        
        $sql_timeline = "INSERT INTO timeline (cliente_id, usuario_id, data_movimentacao, tenant_id, detalhes) 
                         VALUES (?, ?, NOW(), ?, ?)";
        
        $stmt_timeline = $conn->prepare($sql_timeline);
        $stmt_timeline->bind_param("iiis", $cliente_id, $usuario_id, $tenant_id, $detalhes_timeline);
        $stmt_timeline->execute();
        $stmt_timeline->close();
    }
    
    // ✅ 3. ENVIAR E-MAIL SE SOLICITADO
    $email_enviado = false;
    if ($enviar_email) {
        // Buscar dados completos da atividade recém-criada
        $sql_dados = "SELECT a.*, u.email, u.nome as usuario_nome, c.Nome_Cliente, la.nome as tipo_atividade
                     FROM atividades a 
                     LEFT JOIN usuarios u ON a.usuario_id = u.id 
                     LEFT JOIN clientes c ON a.cliente_id = c.id 
                     LEFT JOIN lista_atividades la ON a.lista_atividade_id = la.id
                     WHERE a.id = ?";
        
        $stmt_dados = $conn->prepare($sql_dados);
        $stmt_dados->bind_param("i", $nova_atividade_id);
        $stmt_dados->execute();
        $atividade = $stmt_dados->get_result()->fetch_assoc();
        $stmt_dados->close();
        
        if ($atividade && !empty($atividade['email'])) {
            $assunto = "📅 Nova Atividade: " . $atividade['nome'];
            $mensagem = criarTemplateNotificacao($atividade, 'nova');
            $enviado = enviarEmailNotificacao($atividade['email'], $assunto, $mensagem, $tenant_id);
            
            if ($enviado) {
                $email_enviado = true;
                
                // ✅ 4. REGISTRAR LOG DO ENVIO DE E-MAIL
                $acao_email = 'enviar_email_atividade';
                $detalhes_email = "E-mail de nova atividade enviado para: " . $atividade['email'] . " - Atividade ID: " . $nova_atividade_id;
                
                $sql_log_email = "INSERT INTO cliente_logs (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id, atividade_id, observacao_id) 
                                VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
                $stmt_log_email = $conn->prepare($sql_log_email);
                $stmt_log_email->bind_param("iisssiii", $cliente_id_log, $usuario_id, $nome_usuario, $acao_email, $detalhes_email, $tenant_id, $nova_atividade_id, $observacao_id_log);
                $stmt_log_email->execute();
                $stmt_log_email->close();
                
                error_log("✅ SALVAR_ATIVIDADE.PHP - E-mail enviado e log registrado para ID: $nova_atividade_id");
                $_SESSION['sucesso'] = 'Atividade criada com sucesso! E-mail enviado.';
            } else {
                error_log("❌ SALVAR_ATIVIDADE.PHP - Falha ao enviar e-mail para ID: $nova_atividade_id");
                $_SESSION['sucesso'] = 'Atividade criada com sucesso, mas houve um erro ao enviar o e-mail.';
            }
        } else {
            $_SESSION['sucesso'] = 'Atividade criada com sucesso!';
            error_log("⚠️ SALVAR_ATIVIDADE.PHP - Usuário sem e-mail cadastrado para nova atividade ID: $nova_atividade_id");
        }
    } else {
        $_SESSION['sucesso'] = 'Atividade criada com sucesso!';
    }
    
    // ✅ 5. ATUALIZAR LOG COM INFORMAÇÃO DE E-MAIL
    if ($enviar_email && $email_enviado) {
        $detalhes_log_atualizado = $detalhes . " - E-mail de notificação enviado";
        $sql_atualizar_log = "UPDATE cliente_logs SET detalhes = ? WHERE atividade_id = ? AND acao = 'criar_atividade'";
        $stmt_atualizar_log = $conn->prepare($sql_atualizar_log);
        $stmt_atualizar_log->bind_param("si", $detalhes_log_atualizado, $nova_atividade_id);
        $stmt_atualizar_log->execute();
        $stmt_atualizar_log->close();
    }
    
    error_log("✅ SALVAR_ATIVIDADE.PHP - Atividade criada ID: $nova_atividade_id - Log registrado");
    
} else {
    $_SESSION['erro'] = 'Erro ao criar atividade: ' . $conn->error;
    error_log("❌ SALVAR_ATIVIDADE.PHP - Erro ao criar atividade: " . $conn->error);
}

$stmt->close();
$conn->close();

header('Location: calendario.php');
exit;
?>