<?php
/**
 * teste_gratis.php — Recebe leads de um formulário externo e cria
 * automaticamente um cliente de teste grátis de 6 horas.
 *
 * Espera POST (JSON ou form-data) com: nome, whatsapp, e opcional email.
 */

require_once __DIR__ . '/../core/db_helper.php';
require_once __DIR__ . '/../core/auth.php';
require_once __DIR__ . '/../core/notificacoes.php';

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

$entrada = json_decode(file_get_contents('php://input'), true);
if (!is_array($entrada)) {
    $entrada = $_POST;
}

$nome = trim($entrada['nome'] ?? '');
$whatsapp = preg_replace('/\D/', '', $entrada['whatsapp'] ?? '');
$email = trim($entrada['email'] ?? '');

if (!$nome || !$whatsapp) {
    http_response_code(422);
    echo json_encode(['erro' => 'Nome e WhatsApp são obrigatórios.']);
    exit;
}

// Evita duplicidade: mesmo WhatsApp não pode pedir outro teste em menos de 24h
$clientesAtuais = db_read('clientes');
foreach ($clientesAtuais as $c) {
    if (($c['whatsapp'] ?? '') === $whatsapp && ($c['tipo'] ?? '') === 'teste') {
        $criado = new DateTime($c['criado_em'] ?? 'now');
        if ((new DateTime())->getTimestamp() - $criado->getTimestamp() < 86400) {
            http_response_code(429);
            echo json_encode(['erro' => 'Este WhatsApp já solicitou um teste grátis recentemente.']);
            exit;
        }
    }
}

// Busca um servidor com usuário de teste disponível em estoque
$servidores = db_read('servidores');
$servidorEscolhido = null;
foreach ($servidores as &$srv) {
    if (($srv['estoque_teste_disponivel'] ?? 0) > 0) {
        $servidorEscolhido = $srv;
        break;
    }
}

if (!$servidorEscolhido) {
    http_response_code(503);
    echo json_encode(['erro' => 'Nenhum servidor com teste disponível no momento. Tente novamente mais tarde.']);
    exit;
}

// Decrementa o estoque de teste do servidor escolhido
db_update('servidores', function (&$servidores) use ($servidorEscolhido) {
    foreach ($servidores as &$s) {
        if ($s['id'] === $servidorEscolhido['id']) {
            $s['estoque_teste_disponivel'] = max(0, ($s['estoque_teste_disponivel'] ?? 1) - 1);
            break;
        }
    }
});

$usuarioTeste = 'teste_' . strtolower(substr(preg_replace('/[^a-zA-Z0-9]/', '', $nome), 0, 6)) . rand(100, 999);
$senhaTeste = (string) rand(1000, 9999);
$vencimentoTeste = (new DateTime())->modify('+6 hours');

$novoCliente = [
    'id' => gerar_id('CLI-'),
    'nome' => $nome,
    'whatsapp' => $whatsapp,
    'email' => $email,
    'servidor' => $servidorEscolhido['nome'] ?? '',
    'plano' => 'Teste Grátis 6h',
    'tipo' => 'teste',
    'valor' => 0,
    'usuario_painel' => $usuarioTeste,
    'senha_painel' => $senhaTeste,
    'vencimento' => $vencimentoTeste->format('Y-m-d H:i:s'),
    'status' => 'Ativo',
    'notificado_3_dias' => false,
    'notificado_no_dia' => false,
    'dias_notificados' => [],
    'criado_por' => 'SISTEMA',
    'criado_em' => date('Y-m-d H:i:s'),
    'logs' => [
        ['data' => date('Y-m-d H:i:s'), 'acao' => 'Teste grátis criado automaticamente via formulário externo.'],
    ],
];

db_update('clientes', function (&$clientes) use ($novoCliente) {
    $clientes[] = $novoCliente;
});

// Dispara WhatsApp de boas-vindas ao teste (não consome crédito de operador
// humano pois é originado pelo sistema — ajuste a política se necessário)
$mensagens = db_read('mensagens');
$config = db_read('config');
$instancias = $config['whatsapp']['instancias'] ?? [];
if (!empty($instancias)) {
    $texto = montar_mensagem($mensagens['boas_vindas'] ?? '', $novoCliente);
    db_update('fila_mensagens', function (&$fila) use ($novoCliente, $texto) {
        $fila[] = [
            'id' => gerar_id('MSG-'),
            'whatsapp' => $novoCliente['whatsapp'],
            'mensagem' => $texto,
            'cliente_id' => $novoCliente['id'],
            'status' => 'pendente',
            'tentativas' => 0,
            'criado_em' => date('Y-m-d H:i:s'),
            'enviado_em' => null,
        ];
    });
}

auditoria_log('SISTEMA', 'TESTE_GRATIS_CRIADO', "Cliente {$novoCliente['id']} ({$nome}) - servidor {$servidorEscolhido['nome']}");

echo json_encode([
    'ok' => true,
    'usuario' => $usuarioTeste,
    'senha' => $senhaTeste,
    'expira_em' => $novoCliente['vencimento'],
]);
