<?php
namespace App\Services\Contest;

use App\Models\QsoResult;

/**
 * Calcula pontos por QSO — Regulamento LABRE-DX 2026, Item VI.B
 *
 * Usa as colunas reais da tabela qsos_result:
 *   continent_sent, continent_rcvd (não continente_sent/rcvd)
 *   dxcc_sent, dxcc_rcvd
 *   band  (valores: '10','15','20','40','80','160')
 *
 * TODO Fase 2: chamar este service a partir de PontuacaoController
 */
class QsoPontuador
{
    public function calcular(QsoResult $qso): int
    {
        $altaBanda = in_array($qso->band, config('contest.bandas_altas'));
        $fator     = $altaBanda ? 1 : 2;

        if ($qso->continent_sent !== $qso->continent_rcvd) {
            return config('contest.pontos.continente_diferente')[0] * $fator;
        }
        if ($qso->dxcc_sent !== $qso->dxcc_rcvd) {
            return config('contest.pontos.dxcc_diferente')[0] * $fator;
        }
        return config('contest.pontos.mesmo_dxcc')[0] * $fator;
    }
}
