/** @jest-environment node */
const mockGetDealers = jest.fn();
jest.mock('@/lib/dealer-directory', () => ({
  ...jest.requireActual('@/lib/dealer-directory'),
  getDealersForApex: (...a: unknown[]) => mockGetDealers(...a),
}));

import { generateMetadata, generateStaticParams } from '../[domainSlug]/page';

describe('directory hub', () => {
  it('pre-generates the four apex hubs', async () => {
    const params = await generateStaticParams();
    expect(params).toHaveLength(4);
  });

  it('metadata: canonical is the public /dealers URL, not /directory', async () => {
    const m = await generateMetadata({
      params: Promise.resolve({ domainSlug: 'myamsoil-com' }),
    });
    expect(m.alternates?.canonical).toBe('https://myamsoil.com/dealers');
    expect(JSON.stringify(m)).not.toContain('/directory/');
  });

  it('metadata: hub emits .com/.ca hreflang alternates (domain-separation signal)', async () => {
    const us = await generateMetadata({
      params: Promise.resolve({ domainSlug: 'myamsoil-com' }),
    });
    expect(us.alternates?.languages).toEqual({
      'en-US': 'https://myamsoil.com/dealers',
      'en-CA': 'https://myamsoil.ca/dealers',
    });
    // The .ca hub points the same pair back (en-US still the .com hub).
    const ca = await generateMetadata({
      params: Promise.resolve({ domainSlug: 'myamsoil-ca' }),
    });
    expect(ca.alternates?.languages).toEqual({
      'en-US': 'https://myamsoil.com/dealers',
      'en-CA': 'https://myamsoil.ca/dealers',
    });
  });
});
