// Unit: provider registry dead-provider handling (Session 23).
//
// ParlayAPI was marked `status: 'dead'` after Chrome Claude confirmed its
// host no longer resolves. It must be excluded from every fallback chain
// and the configured-providers list, while still resolving via getProvider
// (the adapter + its mocked tests still reference the config).

const {
  getProvider, getFallbackChain, getConfiguredProviders, isDeadProvider,
} = require('../../src/config/providers');

describe('provider registry — dead providers', () => {
  const saved = {};
  beforeAll(() => {
    // Configure keys so the chain/list filters are exercised on presence.
    for (const k of ['PARLAYAPI_KEY', 'ODDS_API_KEY', 'ODDSPAPI_KEY']) {
      saved[k] = process.env[k];
      process.env[k] = 'test-key';
    }
  });
  afterAll(() => {
    for (const [k, v] of Object.entries(saved)) {
      if (v === undefined) delete process.env[k];
      else process.env[k] = v;
    }
  });

  test('parlayapi is flagged dead', () => {
    expect(isDeadProvider('parlayapi')).toBe(true);
    expect(getProvider('parlayapi')).not.toBeNull(); // config still resolves
    expect(getProvider('parlayapi').status).toBe('dead');
  });

  test('dead provider is excluded from fallback chains', () => {
    const chain = getFallbackChain('historical_props', 'nba', null);
    expect(chain).not.toContain('parlayapi');
  });

  test('dead provider is excluded from configured providers', () => {
    const ids = getConfiguredProviders().map((p) => p.id);
    expect(ids).not.toContain('parlayapi');
  });

  test('live providers still appear in fallback chains', () => {
    const chain = getFallbackChain('closing_lines', 'nba', null);
    expect(chain).toContain('oddspapi');
  });

  test('non-dead providers report isDeadProvider false', () => {
    expect(isDeadProvider('odds-api')).toBe(false);
    expect(isDeadProvider('tank01')).toBe(false);
    expect(isDeadProvider('nonexistent')).toBe(false);
  });
});
