<?php
/**
 * AURA FARMING — Diamantes Parte 08
 * Exibição correta da maior nota pessoal.
 *
 * A maior nota pessoal é calculada diretamente nas partidas aprovadas.
 * Ela não soma todas as partidas e não usa aura_total como destaque do perfil.
 */

if (!function_exists('afMaiorNotaPessoal')) {
    function afMaiorNotaPessoal(PDO $pdo, int $usuarioId): float
    {
        static $cache = [];
        if ($usuarioId <= 0) return 0.0;
        if (array_key_exists($usuarioId, $cache)) return (float)$cache[$usuarioId];

        try {
            $st = $pdo->prepare("SELECT COALESCE(MAX(CASE WHEN pontuacao_validada IS NOT NULL AND pontuacao_validada > 0 THEN pontuacao_validada ELSE pontuacao_total END),0)
                                  FROM af_partidas
                                  WHERE usuario_id=?
                                    AND status='finalizada'
                                    AND antifraude_status='aprovada'
                                    AND COALESCE(admin_status,'normal')='normal'
                                    AND controlled_event_id IS NULL");
            $st->execute([$usuarioId]);
            $cache[$usuarioId] = (float)($st->fetchColumn() ?: 0);
        } catch (Throwable $e) {
            $cache[$usuarioId] = 0.0;
        }
        return (float)$cache[$usuarioId];
    }
}

if (!function_exists('afSincronizarMaiorNotaPessoal')) {
    function afSincronizarMaiorNotaPessoal(PDO $pdo, int $usuarioId): float
    {
        $nota = afMaiorNotaPessoal($pdo, $usuarioId);
        try {
            $st = $pdo->prepare('UPDATE af_usuarios SET melhor_pontuacao=?, atualizado_em=NOW() WHERE id=?');
            $st->execute([$nota, $usuarioId]);
        } catch (Throwable $e) {
            // Não interrompe a tela do usuário se o banco bloquear escrita momentaneamente.
        }
        return $nota;
    }
}

if (!function_exists('afMaiorNotaPessoalOuTexto')) {
    function afMaiorNotaPessoalOuTexto(PDO $pdo, int $usuarioId): string
    {
        $nota = afMaiorNotaPessoal($pdo, $usuarioId);
        if ($nota <= 0) return 'Ainda sem pontuação';
        return function_exists('formatarNumero') ? formatarNumero($nota) : number_format($nota, 0, ',', '.');
    }
}
