<?php
require_once __DIR__ . '/../../_bootstrap.php';
require_once ROOT_PATH . '/includes/match_functions.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonResponse(['ok' => false, 'erro' => 'Método não permitido.'], 405);
}

afValidarCsrfApi();
$u = afApiOuSessaoUsuario($pdo, 'public_live');
$d = requestJson();
$token = preg_replace('/[^a-f0-9]/', '', strtolower((string)($d['s'] ?? '')));
$tipo = strtolower((string)($d['tipo'] ?? ''));

$p = afBuscarPartidaPublicaPorToken($pdo, $token, false, (int)$u['id']);
if (!$p) {
    jsonResponse(['ok' => false, 'erro' => 'Partida ao vivo não encontrada.'], 404);
}

try {
    $rules = function_exists('afDiamondReactionRules') ? afDiamondReactionRules($pdo, $tipo) : [
        'label' => $tipo === 'superlike' ? 'Super Like' : 'Like',
        'diamonds' => $tipo === 'superlike' ? 10 : 2,
        'aura' => $tipo === 'superlike' ? 15 : 2,
        'xp' => $tipo === 'superlike' ? 25 : 5,
    ];
    $estado = afEnviarInteracao($pdo, $p, (int)$u['id'], (int)$u['dispositivo_id'], $tipo);
    $mensagem = sprintf(
        '%s enviado! Você usou %d Diamantes, deu +%s Aura e ganhou +%d XP.',
        (string)$rules['label'],
        (int)$rules['diamonds'],
        number_format((float)$rules['aura'], 0, ',', '.'),
        (int)$rules['xp']
    );
    jsonResponse(['ok' => true, 'partida' => $estado, 'mensagem' => $mensagem]);
} catch (Throwable $e) {
    jsonResponse(['ok' => false, 'erro' => $e->getMessage()], 422);
}
