import { Logger, Module } from '@nestjs/common';
import { FONTE_DADOS } from './fonte-dados.port';
import { FonteFakeAdapter } from './fonte-fake.adapter';
import { FootballDataAdapter } from './football-data.adapter';

/**
 * Ponto único de escolha do fornecedor de dados de futebol.
 *
 * Com `FOOTBALL_DATA_TOKEN` definido, entra a fonte real; sem token, a falsa.
 * Nenhum service de domínio muda entre os dois — é o motivo de a porta existir,
 * e foi o que permitiu construir o backlog inteiro antes de o token chegar.
 */
@Module({
  providers: [
    FonteFakeAdapter,
    {
      provide: FONTE_DADOS,
      useFactory: (fake: FonteFakeAdapter) => {
        const token = process.env.FOOTBALL_DATA_TOKEN;
        if (!token) return fake;
        // Em teste automatizado a fonte real não entra nem com token definido:
        // a suíte dependeria de rede, de cota e do calendário real mudando
        // debaixo dela. `FONTE_REAL=true` liga a real de propósito.
        if (process.env.NODE_ENV === 'test' && process.env.FONTE_REAL !== 'true') {
          return fake;
        }
        new Logger('FonteDadosModule').log(
          'FOOTBALL_DATA_TOKEN encontrado — usando a fonte real',
        );
        return new FootballDataAdapter(token);
      },
      inject: [FonteFakeAdapter],
    },
  ],
  exports: [FONTE_DADOS],
})
export class FonteDadosModule {}
