/* ============================================================
 * Copyright (c) 2026 RAVAPI Soluções. www.ravapi.com
 * Controller de referência — página pública de verificação (fase 5)
 * ATENÇÃO: camada de ligação, ainda não coberta por teste automatizado.
 *
 * De propósito, SEM TenantInterceptor: esta é a única rota do sistema que
 * não tem tenant nenhum — a busca é só pelo código. Ver
 * src/domain/verificacao.service.ts e db/migrations/006_verificacao_publica.sql
 * para como o isolamento por tenant continua garantido mesmo aqui.
 *
 * Rate limit por IP: ver src/domain/rate-limit.service.ts, guardado no
 * próprio PostgreSQL. Falta ainda a página HTML em si — o frontend é
 * Next.js, fora deste repo; esta rota devolve só o JSON que ele consome.
 *
 * O IP vem de req.ip, que só reflete o cliente de verdade se o processo
 * Node estiver atrás de um proxy configurado com "trust proxy" (Express)
 * ou equivalente — sem isso, atrás de um load balancer, todo mundo bate
 * com o mesmo IP e o limite vira global sem querer.
 * ============================================================ */

import { Controller, Get, Header, Param, Req } from '@nestjs/common';
import { VerificacaoService } from '../domain/verificacao.service.ts';

/** Só os dois campos que este controller usa — evita depender do pacote `express` inteiro. */
interface RequisicaoComIp { ip?: string; socket?: { remoteAddress?: string }; }

@Controller('v')
export class VerificacaoController {
  constructor(private readonly verificacao: VerificacaoService) {}

  @Get(':codigo')
  @Header('X-Robots-Tag', 'noindex')
  buscar(@Param('codigo') codigo: string, @Req() req: RequisicaoComIp) {
    const ip = req.ip ?? req.socket?.remoteAddress ?? '0.0.0.0';
    return this.verificacao.publica(codigo, ip);
  }
}
