import { beforeEach, describe, expect, it, vi } from 'vitest';

const mocked = vi.hoisted(() => ({
  poolQuery: vi.fn(),
}));

vi.mock('../../db', () => ({
  default: {
    query: mocked.poolQuery,
  },
}));

describe('forecast team normalization', () => {
  beforeEach(() => {
    vi.clearAllMocks();
    vi.resetModules();
  });

  it('uses the same normalized team keys for accented names in forecast lookups', async () => {
    mocked.poolQuery.mockResolvedValueOnce({ rows: [{ event_id: 'canonical-event-1' }] });

    const { resolveCanonicalEventId } = await import('../forecast');

    const resolved = await resolveCanonicalEventId(
      'source-event-1',
      'Atlético Madrid',
      'Borussia Mönchengladbach',
      '2026-03-30T19:00:00.000Z',
    );

    expect(resolved).toBe('canonical-event-1');
    expect(mocked.poolQuery).toHaveBeenCalledTimes(1);
    expect(mocked.poolQuery.mock.calls[0]?.[1]).toEqual([
      'atleticomadrid',
      'borussiamonchengladbach',
      '2026-03-30T19:00:00.000Z',
    ]);

    const sql = String(mocked.poolQuery.mock.calls[0]?.[0] || '');
    expect(sql).toContain("[èéêëēėęě]");
    expect(sql).toContain("[òóôõöøōő]");
    expect(sql).toContain("[ł]");
    expect(sql).toContain('ABS(EXTRACT(EPOCH FROM (starts_at - $3::timestamptz)))');
    expect(sql).not.toContain('DATE(starts_at) = DATE($3::timestamptz)');
  });
});
