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

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

// Verifica o token CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    echo json_encode(['success' => false, 'message' => 'Token CSRF inválido']);
    exit;
}

$atividade_id = $_POST['id'] ?? null;
$enviar_email = $_POST['enviar_email'] ?? 0;
$tenant_id = $_SESSION['tenant_id'];
$usuario_id = $_SESSION['usuario_id'];

// 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
        $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("📤 EDITAR_ATIVIDADE.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("❌ EDITAR_ATIVIDADE.PHP - Erro cURL para $destinatario: $curl_error (Code: $curl_errno)");
            return false;
        }
        
        if ($http_code === 202) {
            error_log("✅ EDITAR_ATIVIDADE.PHP - SendGrid: Email ACEITO para entrega - HTTP: $http_code");
            error_log("✅ EDITAR_ATIVIDADE.PHP - Destinatário: $destinatario");
            return true;
        } else {
            $erro_msg = "EDITAR_ATIVIDADE.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("❌ EDITAR_ATIVIDADE.PHP - Exceção no SendGrid: " . $e->getMessage());
        return false;
    }
}

// FUNÇÃO PARA CRIAR TEMPLATE DE E-MAIL
function criarTemplateNotificacao($atividade, $tipo = 'lembrete') {
    $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 = [
        'lembrete' => "
            <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; }
                    .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>✏️ Atividade Atualizada</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>" : "") . "
                    <div class='info'><strong>👨‍💼 Responsável:</strong> {$atividade['usuario_nome']}</div>
                    <br>
                    <a href='https://seusite.com/calendario.php' class='btn'>📅 Acessar Calendário</a>
                </div>
            </body>
            </html>
        "
    ];
    
    return $templates[$tipo] ?? $templates['lembrete'];
}

// 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';
        }
    }
}

// Buscar dados atuais da atividade para verificar permissão
$sql_check = "SELECT usuario_id FROM atividades WHERE id = ? AND tenant_id = ?";
$stmt_check = $conn->prepare($sql_check);
$stmt_check->bind_param("ii", $atividade_id, $tenant_id);
$stmt_check->execute();
$result_check = $stmt_check->get_result();

if ($result_check->num_rows === 0) {
    echo json_encode(['success' => false, 'message' => 'Atividade não encontrada']);
    exit;
}

$atividade_data = $result_check->fetch_assoc();
$stmt_check->close();

// Verificar se o usuário é o proprietário da atividade
if ($atividade_data['usuario_id'] != $usuario_id) {
    echo json_encode(['success' => false, 'message' => 'Você não tem permissão para editar esta atividade']);
    exit;
}

// Processar os 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;

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

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

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

// Atualizar a atividade
$sql = "UPDATE atividades SET nome = ?, descricao = ?, data_agendada = ?, notificacao_minutos_antes = ?, cliente_id = ?, lista_atividade_id = ?, duracao_minutos = ? WHERE id = ? AND tenant_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sssiiiiii", $nome, $descricao, $data_hora, $notificacao_minutos_antes, $cliente_id, $lista_atividade_id, $duracao_minutos, $atividade_id, $tenant_id);

if ($stmt->execute()) {
    // Enviar e-mail se solicitado
    $email_enviado = false;
    if ($enviar_email) {
        // Buscar dados atualizados da atividade com informações do usuário
        $sql_atividade = "SELECT a.*, u.email, 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.id = ?";
        $stmt_atividade = $conn->prepare($sql_atividade);
        $stmt_atividade->bind_param("i", $atividade_id);
        $stmt_atividade->execute();
        $atividade = $stmt_atividade->get_result()->fetch_assoc();
        $stmt_atividade->close();
        
        if ($atividade && !empty($atividade['email'])) {
            $assunto = "✏️ Atividade Atualizada: " . $atividade['nome'];
            $mensagem = criarTemplateNotificacao($atividade, 'lembrete');
            $email_enviado = enviarEmailNotificacao($atividade['email'], $assunto, $mensagem, $tenant_id);
            
            if ($email_enviado) {
                error_log("✅ EDITAR_ATIVIDADE.PHP - E-mail de alteração enviado para atividade ID: $atividade_id");
            } else {
                error_log("❌ EDITAR_ATIVIDADE.PHP - Falha ao enviar e-mail de alteração para atividade ID: $atividade_id");
            }
        } else {
            error_log("❌ EDITAR_ATIVIDADE.PHP - Atividade não encontrada ou usuário sem email para ID: $atividade_id");
        }
    }
    
    echo json_encode([
        'success' => true, 
        'message' => 'Atividade atualizada com sucesso' . ($enviar_email ? ($email_enviado ? ' e e-mail enviado' : ', mas e-mail não pôde ser enviado') : ''),
        'email_enviado' => $email_enviado
    ]);
} else {
    echo json_encode(['success' => false, 'message' => 'Erro ao atualizar atividade: ' . $conn->error]);
}

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