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

require_once 'conexao.php';

// Incluir PHPMailer
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// 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 para enviar email de notificação
function enviarEmailAtividadeCriada($atividade_id, $pdo, $clienteId, $usuario_id) {
    error_log("🔔 Tentando enviar email para atividade: " . $atividade_id);
    
    // DEBUG: Adicionar mais informações
    error_log("📋 Dados: clienteId=$clienteId, usuario_id=$usuario_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'] . ")");
    
    $mail = new PHPMailer(true);

    try {
        // ⭐⭐ CONFIGURAÇÃO IDÊNTICA AO RECUPERAR SENHA QUE FUNCIONA ⭐⭐
        $mail->isSMTP();
        $mail->Host = 'ns242.hostgator.com.br';
        $mail->SMTPAuth = true;
        $mail->Username = 'recuperacao@son.tvitecnologia.com.br'; // ⬅️ CORRETO
        $mail->Password = 'Gabrielito@1'; // ⬅️ CORRETO
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = 587;
        $mail->CharSet = 'UTF-8';
        $mail->SMTPDebug = 2; // ⬅️ ATIVAR DEBUG TEMPORARIAMENTE
        
        // Capturar debug
        ob_start();
        $mail->Debugoutput = function($str, $level) {
            error_log("PHPMailer [$level]: $str");
        };

        // Remetente e destinatário
        $mail->setFrom('recuperacao@son.tvitecnologia.com.br', 'SON TVi Tecnologia');
        $mail->addAddress($usuario['email'], $usuario['nome']);
        $mail->addReplyTo('suporte@son.tvitecnologia.com.br', 'Suporte');

        // Conteúdo do e-mail
        $mail->isHTML(true);
        $mail->Subject = 'Nova atividade criada - SON TVi Tecnologia';
        
        $data_brasil = date('d/m/Y H:i', strtotime($atividade['data_agendada']));
        
        $mail->Body = "
            <html>
            <head>
                <meta charset='UTF-8'>
                <style>
                    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
                    .container { max-width: 600px; margin: 0 auto; padding: 20px; }
                    .destaque { 
                        background-color: #f4f4f4; 
                        padding: 15px; 
                        border-radius: 5px; 
                        margin: 15px 0;
                        border-left: 4px solid #3498db;
                    }
                    .info { color: #666; font-size: 0.9em; }
                </style>
            </head>
            <body>
                <div class='container'>
                    <h2>Nova Atividade Criada</h2>
                    <p>Olá <strong>{$usuario['nome']}</strong>,</p>
                    <p>Uma nova atividade foi criada para você:</p>
                    
                    <div class='destaque'>
                        <h3 style='margin-top: 0;'>{$atividade['nome']}</h3>
                        <p><strong>Descrição:</strong> " . ($atividade['descricao'] ?: 'Nenhuma descrição') . "</p>
                        <p><strong>Data/Hora:</strong> {$data_brasil}</p>
                        <p><strong>Notificar:</strong> {$atividade['notificacao_minutos_antes']} minutos antes</p>
                    </div>
                    
                    <p class='info'>Esta é uma notificação automática do sistema.</p>
                    <p>Atenciosamente,<br><strong>Equipe SON TVi Tecnologia</strong></p>
                </div>
            </body>
            </html>
        ";

        $mail->AltBody = "Nova Atividade Criada\n\n"
            . "Olá {$usuario['nome']},\n\n"
            . "Uma nova atividade foi criada para você:\n\n"
            . "Atividade: {$atividade['nome']}\n"
            . "Descrição: " . ($atividade['descricao'] ?: 'Nenhuma descrição') . "\n"
            . "Data/Hora: {$data_brasil}\n"
            . "Notificação: {$atividade['notificacao_minutos_antes']} minutos antes\n\n"
            . "Atenciosamente,\n"
            . "Equipe SON TVi Tecnologia";

        $debug_output = ob_get_clean();
        error_log("📧 Debug PHPMailer: " . $debug_output);
        
        $enviado = $mail->send();
        
        if ($enviado) {
            error_log("✅ 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("❌ FALHA NO ENVIO do email para: " . $usuario['email']);
        }
        
        return $enviado;
        
    } catch (Exception $e) {
        $error_msg = "❌ ERRO PHPMailer: " . $e->getMessage() . " - " . $mail->ErrorInfo;
        error_log($error_msg);
        return false;
    }
}

// --- INSERIR NOVA ATIVIDADE ---
if ($method === 'POST') {
    error_log("📥 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;

    error_log("📋 Dados recebidos: nome=$nome, data_agendada=$data_agendada, usuario_id=$usuario_id");

    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
        $email_enviado = enviarEmailAtividadeCriada($atividade_id, $pdo, $clienteId, $usuario_id);
        
        error_log("📧 Resultado final do email: " . ($email_enviado ? 'ENVIADO' : 'FALHA'));
        
        echo json_encode([
            'success' => true, 
            'id' => $atividade_id,
            'email_enviado' => $email_enviado,
            'message' => $email_enviado ? 
                'Atividade criada e notificação enviada por email' : 
                'Atividade criada, mas a notificação por email não pôde ser enviada'
        ]);
    } 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') {
    $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;
    $notificar = isset($data['notificar']) ? (int)$data['notificar'] : 0;

    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 = ?, notificar = ? WHERE id = ? AND cliente_id = ?");
    $ok = $stmt->execute([$nome, $descricao, $data_agendada, $notificacao_minutos_antes, $notificar, $id, $clienteId]);

    if ($ok) {
        echo json_encode(['success' => true]);
    } 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;
?>