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

require_once 'conexao.php';

// Validar autenticação do usuário/tenant
if (!isset($_SESSION['cliente_id'])) {
    http_response_code(401);
    echo json_encode(['error' => 'Usuário não autenticado']);
    exit;
}

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

// Pega método HTTP
$method = $_SERVER['REQUEST_METHOD'];

// Para POST e PUT, ler dados JSON enviados
$data = json_decode(file_get_contents('php://input'), true);

if (!$data) {
    $data = $_POST;
}

function limparTexto($texto) {
    return trim(htmlspecialchars($texto, ENT_QUOTES, 'UTF-8'));
}

// FUNÇÃO DE ENVIO DE E-MAIL COM SENDGRID (MESMA DO CALENDARIO.PHP)
function enviarEmailNotificacao($destinatario, $assunto, $mensagem, $tenant_id) {
    try {
        // ✅ CONFIGURAÇÃO SENDGRID - MESMA DO enviar_email.php E calendario.php
        $sendgrid_api_key = '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';
        
        // Verificar se a API Key está no formato correto
        if (empty($sendgrid_api_key) || strlen($sendgrid_api_key) < 20) {
            error_log("❌ API Key do SendGrid não configurada ou inválida");
            return false;
        }
        
        // ✅ E-MAIL VERIFICADO NO SENDGRID - MESMO DO enviar_email.php
        $emailRemetenteVerificado = 'sistema@notificacaoson.tvitecnologia.com.br';
        $nomeRemetenteVerificado = 'Sistema SON';
        
        // Configurações de nome por tenant
        $configs = [
            1 => [ // Tenant 1
                'from_name' => 'Sistema Empresa 1'
            ],
            2 => [ // Tenant 2  
                'from_name' => 'Sistema Empresa 2'
            ]
        ];
        
        $config = $configs[$tenant_id] ?? [
            'from_name' => 'SON Sistema'
        ];
        
        $nomeRemetenteVerificado = $config['from_name'];
        
        // Validar e-mail do destinatário
        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';
        
        // ✅ Estrutura CORRIGIDA - Mais simples e funcional
        $data = [
            'personalizations' => [
                [
                    'to' => [
                        [
                            'email' => $destinatario,
                            'name' => 'Usuário'
                        ]
                    ],
                    'subject' => $assunto
                ]
            ],
            'from' => [
                'email' => $emailRemetenteVerificado,
                'name' => $nomeRemetenteVerificado
            ],
            'content' => [
                [
                    'type' => 'text/html',
                    'value' => $mensagem
                ]
            ]
        ];
        
        // Log detalhado para debug
        error_log("📤 ATIVIDADES.PHP - Enviando email via SendGrid:");
        error_log("📤 De: $nomeRemetenteVerificado <$emailRemetenteVerificado>");
        error_log("📤 Para: $destinatario");
        error_log("📤 Assunto: $assunto");
        error_log("📤 Tenant ID: $tenant_id");
        
        $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);
        
        // Log da resposta completa para debug
        error_log("📤 SendGrid Response - HTTP Code: $http_code");
        if ($response) {
            error_log("📤 SendGrid Response - Body: " . substr($response, 0, 500));
        }
        
        curl_close($ch);
        
        if ($curl_errno) {
            error_log("❌ ATIVIDADES.PHP - Erro cURL para $destinatario: $curl_error (Code: $curl_errno)");
            return false;
        }
        
        if ($http_code === 202) {
            error_log("✅ ATIVIDADES.PHP - SendGrid: Email ACEITO para entrega - HTTP: $http_code");
            error_log("✅ ATIVIDADES.PHP - Destinatário: $destinatario");
            return true;
        } else {
            $erro_msg = "ATIVIDADES.PHP - Falha no envio para $destinatario - HTTP: $http_code";
            if ($response) {
                $response_data = json_decode($response, true);
                if (isset($response_data['errors'])) {
                    foreach ($response_data['errors'] as $error) {
                        $erro_msg .= " - Erro: " . $error['message'];
                    }
                } else {
                    $erro_msg .= " - Response: " . $response;
                }
            }
            error_log("❌ $erro_msg");
            return false;
        }
        
    } catch (Exception $e) {
        error_log("❌ ATIVIDADES.PHP - Exceção no SendGrid: " . $e->getMessage());
        return false;
    }
}

// Função para enviar email de notificação de atividade
function enviarEmailAtividadeCriada($atividade_id, $pdo, $clienteId, $usuario_id, $tenant_id) {
    error_log("🔔 ATIVIDADES.PHP - Tentando enviar email para atividade: " . $atividade_id);
    
    // DEBUG: Adicionar mais informações
    error_log("📋 Dados: clienteId=$clienteId, usuario_id=$usuario_id, tenant_id=$tenant_id");
    
    // Buscar dados da atividade
    $stmt = $pdo->prepare("SELECT nome, descricao, data_agendada, notificacao_minutos_antes FROM atividades WHERE id = ? AND cliente_id = ?");
    $stmt->execute([$atividade_id, $clienteId]);
    $atividade = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$atividade) {
        error_log("❌ Atividade não encontrada");
        return false;
    }
    
    error_log("✅ Atividade encontrada: " . $atividade['nome']);
    
    // Buscar dados do usuário
    $stmt_user = $pdo->prepare("SELECT email, nome FROM usuarios WHERE id = ? AND ativo = 'sim'");
    $stmt_user->execute([$usuario_id]);
    $usuario = $stmt_user->fetch(PDO::FETCH_ASSOC);
    
    if (!$usuario) {
        error_log("❌ Usuário não encontrado. ID: " . $usuario_id);
        return false;
    }
    
    if (empty($usuario['email'])) {
        error_log("❌ Usuário não tem email cadastrado. ID: " . $usuario_id);
        return false;
    }
    
    error_log("✅ Usuário encontrado: " . $usuario['nome'] . " (" . $usuario['email'] . ")");
    
    // Preparar assunto e mensagem
    $assunto = "📅 Nova Atividade Criada: " . $atividade['nome'];
    $data_brasil = date('d/m/Y H:i', strtotime($atividade['data_agendada']));
    
    $mensagem = "
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; 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; }
                .info { margin: 10px 0; }
                .destaque { 
                    background-color: #e7f3ff; 
                    padding: 15px; 
                    border-radius: 5px; 
                    margin: 15px 0;
                    border-left: 4px solid #007bff;
                }
            </style>
        </head>
        <body>
            <div class='container'>
                <div class='header'>
                    <h2>📅 Nova Atividade Criada</h2>
                </div>
                
                <p>Olá <strong>{$usuario['nome']}</strong>,</p>
                <p>Uma nova atividade foi criada para você no sistema SON:</p>
                
                <div class='destaque'>
                    <div class='info'><strong>📋 Atividade:</strong> {$atividade['nome']}</div>
                    " . ($atividade['descricao'] ? "<div class='info'><strong>📝 Descrição:</strong> {$atividade['descricao']}</div>" : "") . "
                    <div class='info'><strong>📅 Data/Hora:</strong> {$data_brasil}</div>
                    <div class='info'><strong>⏰ Notificar:</strong> {$atividade['notificacao_minutos_antes']} minutos antes</div>
                </div>
                
                <p><em>Esta é uma notificação automática do sistema SON.</em></p>
                
                <div style='margin-top: 20px; padding-top: 20px; border-top: 1px solid #eee;'>
                    <p>Atenciosamente,<br><strong>Sistema SON</strong></p>
                </div>
            </div>
        </body>
        </html>
    ";

    // Usar a função SendGrid unificada
    $enviado = enviarEmailNotificacao($usuario['email'], $assunto, $mensagem, $tenant_id);
    
    if ($enviado) {
        error_log("✅ ATIVIDADES.PHP - EMAIL ENVIADO COM SUCESSO para: " . $usuario['email']);
        // Marcar como notificada
        $update = $pdo->prepare("UPDATE atividades SET notificar = 1 WHERE id = ?");
        $update->execute([$atividade_id]);
    } else {
        error_log("❌ ATIVIDADES.PHP - FALHA NO ENVIO do email para: " . $usuario['email']);
    }
    
    return $enviado;
}

// Função para enviar email de edição de atividade
function enviarEmailAtividadeEditada($atividade_id, $pdo, $clienteId, $usuario_id, $tenant_id) {
    error_log("🔔 ATIVIDADES.PHP - Tentando enviar email de EDIÇÃO para atividade: " . $atividade_id);
    
    // Buscar dados da atividade
    $stmt = $pdo->prepare("SELECT nome, descricao, data_agendada, notificacao_minutos_antes FROM atividades WHERE id = ? AND cliente_id = ?");
    $stmt->execute([$atividade_id, $clienteId]);
    $atividade = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$atividade) {
        error_log("❌ Atividade não encontrada para envio de edição");
        return false;
    }
    
    // Buscar dados do usuário
    $stmt_user = $pdo->prepare("SELECT email, nome FROM usuarios WHERE id = ? AND ativo = 'sim'");
    $stmt_user->execute([$usuario_id]);
    $usuario = $stmt_user->fetch(PDO::FETCH_ASSOC);
    
    if (!$usuario || empty($usuario['email'])) {
        error_log("❌ Usuário não encontrado ou sem email para envio de edição");
        return false;
    }
    
    // Preparar assunto e mensagem
    $assunto = "✏️ Atividade Atualizada: " . $atividade['nome'];
    $data_brasil = date('d/m/Y H:i', strtotime($atividade['data_agendada']));
    
    $mensagem = "
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; margin: 20px; }
                .container { max-width: 600px; margin: 0 auto; border: 1px solid #ddd; border-radius: 8px; padding: 20px; }
                .header { background: #fff3cd; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
                .info { margin: 10px 0; }
                .destaque { 
                    background-color: #e7f3ff; 
                    padding: 15px; 
                    border-radius: 5px; 
                    margin: 15px 0;
                    border-left: 4px solid #007bff;
                }
            </style>
        </head>
        <body>
            <div class='container'>
                <div class='header'>
                    <h2>✏️ Atividade Atualizada</h2>
                </div>
                
                <p>Olá <strong>{$usuario['nome']}</strong>,</p>
                <p>Uma atividade foi atualizada no sistema SON:</p>
                
                <div class='destaque'>
                    <div class='info'><strong>📋 Atividade:</strong> {$atividade['nome']}</div>
                    " . ($atividade['descricao'] ? "<div class='info'><strong>📝 Descrição:</strong> {$atividade['descricao']}</div>" : "") . "
                    <div class='info'><strong>📅 Data/Hora:</strong> {$data_brasil}</div>
                    <div class='info'><strong>⏰ Notificar:</strong> {$atividade['notificacao_minutos_antes']} minutos antes</div>
                </div>
                
                <p><em>Esta é uma notificação automática do sistema SON.</em></p>
                
                <div style='margin-top: 20px; padding-top: 20px; border-top: 1px solid #eee;'>
                    <p>Atenciosamente,<br><strong>Sistema SON</strong></p>
                </div>
            </div>
        </body>
        </html>
    ";

    // Usar a função SendGrid unificada
    $enviado = enviarEmailNotificacao($usuario['email'], $assunto, $mensagem, $tenant_id);
    
    if ($enviado) {
        error_log("✅ ATIVIDADES.PHP - EMAIL DE EDIÇÃO ENVIADO COM SUCESSO para: " . $usuario['email']);
    } else {
        error_log("❌ ATIVIDADES.PHP - FALHA NO ENVIO do email de edição para: " . $usuario['email']);
    }
    
    return $enviado;
}

// --- INSERIR NOVA ATIVIDADE ---
if ($method === 'POST') {
    error_log("📥 ATIVIDADES.PHP - Recebida requisição POST para criar atividade");
    
    // Valida campos obrigatórios
    $nome = isset($data['nome']) ? limparTexto($data['nome']) : '';
    $descricao = isset($data['descricao']) ? limparTexto($data['descricao']) : '';
    $data_agendada = $data['data_agendada'] ?? '';
    $notificacao_minutos_antes = isset($data['notificacao_minutos_antes']) ? (int)$data['notificacao_minutos_antes'] : 0;
    $enviar_email = isset($data['enviar_email']) ? (bool)$data['enviar_email'] : false;

    error_log("📋 Dados recebidos: nome=$nome, data_agendada=$data_agendada, usuario_id=$usuario_id, enviar_email=" . ($enviar_email ? 'SIM' : 'NÃO'));

    if (!$nome || !$data_agendada) {
        http_response_code(400);
        echo json_encode(['error' => 'Campos nome e data_agendada são obrigatórios']);
        exit;
    }

    // Insere no banco com os campos corretos da sua tabela
    $stmt = $pdo->prepare("INSERT INTO atividades (
        tenant_id, usuario_id, nome, descricao, data_agendada, 
        notificacao_minutos_antes, ativo, cliente_id, notificar
    ) VALUES (?, ?, ?, ?, ?, ?, 1, ?, 0)");
    
    $ok = $stmt->execute([
        $tenant_id, $usuario_id, $nome, $descricao, $data_agendada,
        $notificacao_minutos_antes, $clienteId
    ]);

    if ($ok) {
        $atividade_id = $pdo->lastInsertId();
        error_log("✅ Atividade criada no banco. ID: " . $atividade_id);
        
        // ENVIAR EMAIL DE NOTIFICAÇÃO SE SOLICITADO
        $email_enviado = false;
        if ($enviar_email) {
            $email_enviado = enviarEmailAtividadeCriada($atividade_id, $pdo, $clienteId, $usuario_id, $tenant_id);
            error_log("📧 Resultado final do email: " . ($email_enviado ? 'ENVIADO' : 'FALHA'));
        } else {
            error_log("📧 Email não solicitado para envio");
        }
        
        echo json_encode([
            'success' => true, 
            'id' => $atividade_id,
            'email_enviado' => $email_enviado,
            'message' => $email_enviado ? 
                'Atividade criada e notificação enviada por email' : 
                ($enviar_email ? 
                    'Atividade criada, mas a notificação por email não pôde ser enviada' : 
                    'Atividade criada com sucesso')
        ]);
    } else {
        error_log("❌ Erro ao inserir atividade no banco");
        http_response_code(500);
        echo json_encode(['error' => 'Erro ao inserir atividade']);
    }
    exit;
}

// --- EDITAR ATIVIDADE EXISTENTE ---
if ($method === 'PUT') {
    error_log("📥 ATIVIDADES.PHP - Recebida requisição PUT para editar atividade");
    
    $id = isset($data['id']) ? (int)$data['id'] : 0;
    if (!$id) {
        http_response_code(400);
        echo json_encode(['error' => 'ID da atividade é obrigatório para edição']);
        exit;
    }

    // Verifica se atividade pertence ao cliente
    $stmt = $pdo->prepare("SELECT id FROM atividades WHERE id = ? AND cliente_id = ?");
    $stmt->execute([$id, $clienteId]);
    if (!$stmt->fetch()) {
        http_response_code(403);
        echo json_encode(['error' => 'Atividade não encontrada para este cliente']);
        exit;
    }

    $nome = isset($data['nome']) ? limparTexto($data['nome']) : '';
    $descricao = isset($data['descricao']) ? limparTexto($data['descricao']) : '';
    $data_agendada = $data['data_agendada'] ?? '';
    $notificacao_minutos_antes = isset($data['notificacao_minutos_antes']) ? (int)$data['notificacao_minutos_antes'] : 0;
    $enviar_email = isset($data['enviar_email']) ? (bool)$data['enviar_email'] : false;

    error_log("📋 Dados edição: id=$id, nome=$nome, enviar_email=" . ($enviar_email ? 'SIM' : 'NÃO'));

    if (!$nome || !$data_agendada) {
        http_response_code(400);
        echo json_encode(['error' => 'Campos nome e data_agendada são obrigatórios']);
        exit;
    }

    $stmt = $pdo->prepare("UPDATE atividades SET nome = ?, descricao = ?, data_agendada = ?, notificacao_minutos_antes = ? WHERE id = ? AND cliente_id = ?");
    $ok = $stmt->execute([$nome, $descricao, $data_agendada, $notificacao_minutos_antes, $id, $clienteId]);

    if ($ok) {
        // ENVIAR EMAIL DE NOTIFICAÇÃO DE EDIÇÃO SE SOLICITADO
        $email_enviado = false;
        if ($enviar_email) {
            $email_enviado = enviarEmailAtividadeEditada($id, $pdo, $clienteId, $usuario_id, $tenant_id);
            error_log("📧 Resultado final do email de edição: " . ($email_enviado ? 'ENVIADO' : 'FALHA'));
        } else {
            error_log("📧 Email de edição não solicitado para envio");
        }
        
        echo json_encode([
            'success' => true,
            'email_enviado' => $email_enviado,
            'message' => $email_enviado ? 
                'Atividade atualizada e notificação enviada por email' : 
                ($enviar_email ? 
                    'Atividade atualizada, mas a notificação por email não pôde ser enviada' : 
                    'Atividade atualizada com sucesso')
        ]);
    } else {
        http_response_code(500);
        echo json_encode(['error' => 'Erro ao atualizar atividade']);
    }
    exit;
}

// --- BUSCAR ATIVIDADE ---
if ($method === 'GET') {
    $id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

    if ($id) {
        // Busca atividade pelo id
        $stmt = $pdo->prepare("SELECT id, nome, descricao, data_agendada, notificacao_minutos_antes, notificar FROM atividades WHERE id = ? AND cliente_id = ?");
        $stmt->execute([$id, $clienteId]);
        $atividade = $stmt->fetch(PDO::FETCH_ASSOC);
        if ($atividade) {
            echo json_encode($atividade);
        } else {
            http_response_code(404);
            echo json_encode(['error' => 'Atividade não encontrada']);
        }
        exit;
    } else {
        // Listar todas as atividades do cliente
        $stmt = $pdo->prepare("SELECT id, nome, descricao, data_agendada, notificacao_minutos_antes, notificar FROM atividades WHERE cliente_id = ? ORDER BY data_agendada ASC");
        $stmt->execute([$clienteId]);
        $atividades = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($atividades);
        exit;
    }
}

http_response_code(405);
echo json_encode(['error' => 'Método não permitido']);
exit;
?>