<?php
header('Content-Type: application/json');
session_start();
require_once '../conexao.php';
require_once '../env.php';
require_once '../include/email-anuncio-pago.php';

// Ajuste a role dependendo de quem dispara esta ação (Empresas ou Candidatos)
if (!isset($_SESSION['id']) || ($_SESSION['role'] ?? '') !== 'Empresas') {
    echo json_encode(['success' => false, 'message' => 'Acesso negado.']); exit;
}

$agendamento_id = filter_input(INPUT_POST, 'agendamento_id', FILTER_VALIDATE_INT);
$nova_data = $_POST['nova_data'] ?? null;
$mensagem = $_POST['mensagem'] ?? '';

if (!$agendamento_id || !$nova_data) {
    echo json_encode(['success' => false, 'message' => 'Dados obrigatórios ausentes.']); exit;
}

try {
    $pdo->beginTransaction();

    // 1. Busca Híbrida (Pago/Gratuito) com trava de segurança
    // Nota: Adicionei COALESCE no título e verifiquei a empresa
    $sql = "SELECT c.nome, c.email, age.vaga_id, e.nome_empresa, 
                   COALESCE(ap.titulo_vaga, ag.titulo_vaga, 'Vaga Selecionada') as titulo_vaga
            FROM Agendamentos age
            JOIN Candidatos c ON age.candidato_id = c.id
            LEFT JOIN anuncio_pago ap ON age.vaga_id = ap.id
            LEFT JOIN anuncio_gratuito ag ON age.vaga_id = ag.id
            JOIN Empresas e ON e.id = :emp_id
            WHERE age.id = :age_id";
            
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':age_id' => $agendamento_id, ':emp_id' => $_SESSION['id']]);
    $info = $stmt->fetch();

    if (!$info) throw new Exception("Agendamento não encontrado ou sem permissão.");

    // 2. Atualiza o Agendamento 
    // Corrigido: data_hora_entrevista recebe nova_data, e mensagem vai para motivo_reagendamento
    $up = $pdo->prepare("UPDATE Agendamentos 
                         SET data_hora_entrevista = :data, 
                             motivo_reagendamento = :msg, 
                             status = 'Reagendamento Solicitado' 
                         WHERE id = :id");
    
    $up->execute([
        ':data' => $nova_data, 
        ':msg'  => $mensagem, 
        ':id'   => $agendamento_id
    ]);

    // 3. Notifica o Candidato por e-mail
    $mail = configurarMailerParaAnuncioPago();
    if ($mail) {
        $mail->addAddress($info['email'], $info['nome']);
        $mail->Subject = "REAGENDAMENTO DE ENTREVISTA: " . $info['titulo_vaga'];
        
        $data_f = date('d/m/Y \à\s H:i', strtotime($nova_data));

        $mail->isHTML(true);
        $mail->Body = "
            <div style='font-family: sans-serif; line-height: 1.6;'>
                <h2>Olá, {$info['nome']}!</h2>
                <p>A empresa <strong>{$info['nome_empresa']}</strong> solicitou o reagendamento da sua entrevista para a vaga <strong>{$info['titulo_vaga']}</strong>.</p>
                <div style='background: #f8f9fa; padding: 15px; border-radius: 8px; border-left: 4px solid #12929e;'>
                    <p><strong>Novo Horário Sugerido:</strong> {$data_f}</p>
                    <p><strong>Observação do Recrutador:</strong><br> " . nl2br(htmlspecialchars($mensagem)) . "</p>
                </div>
                <br>
                <p>Por favor, acesse seu painel na <strong>Selflix Vagas</strong> para confirmar ou sugerir outro horário.</p>
                <p>Atenciosamente,<br>Equipe Selflix</p>
            </div>";
        $mail->send();
    }

    $pdo->commit();
    echo json_encode(['success' => true, 'message' => 'Solicitação de reagendamento enviada!']);

} catch (Exception $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    error_log("Erro Reagendamento: " . $e->getMessage());
    echo json_encode(['success' => false, 'message' => 'Erro ao processar: ' . $e->getMessage()]);
}