<?php
/**
 * AJAX: Reenviar link de verificação de e-mail
 * Aceita: { token_expirado: string } OU { usuario_id: int } (admin)
 */
ob_start();
include '../adm/config/db.php';
ob_end_clean();

require_once __DIR__ . '/inc/mailer.php';
require_once __DIR__ . '/inc/email_templates.php';

header('Content-Type: application/json');

$input = json_decode(file_get_contents('php://input'), true);
$response = ['success' => false, 'message' => 'Dados inválidos.'];

// Determina o usuário pelo token expirado OU pelo ID (uso admin)
$user = null;

if (!empty($input['token_expirado'])) {
    $tokenExpirado = trim($input['token_expirado']);
    $stmt = $conn->prepare(
        "SELECT id, nome_completo, email_principal, email_verificado
         FROM usuarios WHERE token_verificacao = ? LIMIT 1"
    );
    $stmt->bind_param("s", $tokenExpirado);
    $stmt->execute();
    $user = $stmt->get_result()->fetch_assoc();

} elseif (!empty($input['email'])) {
    $emailBusca = trim($input['email']);
    $stmt = $conn->prepare(
        "SELECT id, nome_completo, email_principal, email_verificado
         FROM usuarios WHERE email_principal = ? LIMIT 1"
    );
    $stmt->bind_param("s", $emailBusca);
    $stmt->execute();
    $user = $stmt->get_result()->fetch_assoc();

} elseif (!empty($input['usuario_id'])) {
    // Uso interno do painel admin (verificado pelo header Referer — simples)
    $uid = (int)$input['usuario_id'];
    $stmt = $conn->prepare(
        "SELECT id, nome_completo, email_principal, email_verificado
         FROM usuarios WHERE id = ? LIMIT 1"
    );
    $stmt->bind_param("i", $uid);
    $stmt->execute();
    $user = $stmt->get_result()->fetch_assoc();
}

if (!$user) {
    $response['message'] = 'Usuário não encontrado.';
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit;
}

if ((int)$user['email_verificado'] === 1) {
    $response['message'] = 'Este e-mail já está verificado.';
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit;
}

// Gera novo token com 24h de validade
$novoToken  = gerarTokenVerificacao();
$expiraEm   = date('Y-m-d H:i:s', strtotime('+24 hours'));

$upStmt = $conn->prepare(
    "UPDATE usuarios SET token_verificacao = ?, token_expira_em = ? WHERE id = ?"
);
$upStmt->bind_param("ssi", $novoToken, $expiraEm, $user['id']);

if (!$upStmt->execute()) {
    $response['message'] = 'Erro interno ao gerar token.';
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit;
}

// Monta link de verificação absoluto
$proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host  = $_SERVER['HTTP_HOST'] ?? 'localhost';
// Detecta prefixo da pasta (nova ou outro nome)
$scriptDir  = dirname($_SERVER['SCRIPT_NAME'] ?? '/nova/reenviar-verificacao.php');
$linkVerificacao = $proto . '://' . $host . $scriptDir . '/verificar-email.php?token=' . urlencode($novoToken);

try {
    $loja      = _getLojaEmailData($conn);
    $assunto   = '✉️ Confirme seu e-mail - ' . $loja['nome'];
    $htmlEmail = emailVerificacaoCadastro($user['nome_completo'], $linkVerificacao, $loja);
    $enviado   = enviarEmail($user['email_principal'], $user['nome_completo'], $assunto, $htmlEmail);

    if ($enviado) {
        $emailMasked = preg_replace('/(?<=.{3}).(?=.*@)/', '*', $user['email_principal']);
        $response = [
            'success' => true,
            'message' => "Link de verificação reenviado para <strong>{$emailMasked}</strong>. Verifique sua caixa de entrada."
        ];
    } else {
        $response['message'] = 'Falha ao enviar o e-mail. Tente novamente.';
    }
} catch (\Throwable $ex) {
    error_log('[REENVIAR-VERIFICACAO] ' . $ex->getMessage());
    $response['message'] = 'Erro ao processar o envio.';
}

echo json_encode($response, JSON_UNESCAPED_UNICODE);
