import { FieldValue, getFirestore } from 'firebase-admin/firestore';
import { onDocumentUpdated } from 'firebase-functions/v2/firestore';
import { logger } from 'firebase-functions';

/**
 * Guarda a versão anterior do palpite quando o **valor** muda (PP-2).
 *
 * É a auditoria que resolve a discussão "eu tinha mudado": vale a última versão
 * aceita antes do apito, e a anterior fica registrada. Escrita por Function, nunca
 * pelo cliente — prova escrita por quem tem interesse nela não é prova.
 *
 * **Só quando o valor muda.** A fila offline de `PP-4` reenvia o mesmo lote quando
 * a rede volta, e a apuração escreve `points`/`band` no mesmo documento. Registrar
 * revisão em toda escrita encheria o histórico de linhas idênticas e o faria
 * deixar de servir para o que existe — foi exatamente o defeito corrigido no
 * backend antigo em 06/08 (`PP-2-04`).
 */
export const registrarRevisaoDoPalpite = onDocumentUpdated(
  {
    document: 'boloes/{poolId}/palpites/{palpiteId}',
    region: 'southamerica-east1',
  },
  async (evento) => {
    const antes = evento.data?.before.data();
    const depois = evento.data?.after.data();
    if (!antes || !depois) return;

    const mudouOValor =
      antes.homeScore !== depois.homeScore ||
      antes.awayScore !== depois.awayScore;
    if (!mudouOValor) return;

    const db = getFirestore();
    await db
      .collection(
        `boloes/${evento.params.poolId}/palpites/${evento.params.palpiteId}/revisoes`,
      )
      .add({
        homeScore: antes.homeScore,
        awayScore: antes.awayScore,
        substituidoEm: FieldValue.serverTimestamp(),
      });

    logger.info(
      `palpite ${evento.params.palpiteId}: ${antes.homeScore}x${antes.awayScore} → ` +
        `${depois.homeScore}x${depois.awayScore} (revisão registrada)`,
    );
  },
);
