/** @jest-environment node */
import { generateMetadata, generateStaticParams, dealerCountLabel } from '../[domainSlug]/page';

describe('dealerCountLabel', () => {
  it('uses the singular for exactly one dealer', () => {
    expect(dealerCountLabel(1)).toBe('1 dealer');
  });
  it('uses the plural for zero or many', () => {
    expect(dealerCountLabel(0)).toBe('0 dealers');
    expect(dealerCountLabel(2)).toBe('2 dealers');
    expect(dealerCountLabel(15)).toBe('15 dealers');
  });
});

describe('stub page generateStaticParams', () => {
  it('pre-generates exactly the four apex slugs', async () => {
    const params = await generateStaticParams();
    expect(params.map((p) => p.domainSlug).sort()).toEqual([
      'myamsoil-ca',
      'myamsoil-com',
      'shopamsoil-ca',
      'shopamsoil-com',
    ]);
  });
});

describe('stub page generateMetadata', () => {
  const meta = (slug: string) =>
    generateMetadata({ params: Promise.resolve({ domainSlug: slug }) });

  it('emits host-correct canonical with no trailing slash issues', async () => {
    const m = await meta('myamsoil-com');
    expect(m.alternates?.canonical).toBe('https://myamsoil.com');
    expect(m.alternates?.canonical).not.toMatch(/\/$/);
  });

  it('emits per-domain og:site_name (no AIMCLEAR anywhere)', async () => {
    for (const slug of ['myamsoil-com', 'shopamsoil-com', 'myamsoil-ca', 'shopamsoil-ca']) {
      const m = await meta(slug);
      expect(JSON.stringify(m)).not.toMatch(/aimclear/i);
      expect(m.openGraph?.siteName?.length).toBeGreaterThan(3);
    }
  });

  it('emits hreflang pairs between com and ca siblings', async () => {
    const m = await meta('myamsoil-com');
    expect(m.alternates?.languages?.['en-US']).toBe('https://myamsoil.com');
    expect(m.alternates?.languages?.['en-CA']).toBe('https://myamsoil.ca');
  });

  it('four domains produce four distinct titles and descriptions', async () => {
    const all = await Promise.all(
      ['myamsoil-com', 'shopamsoil-com', 'myamsoil-ca', 'shopamsoil-ca'].map(meta)
    );
    expect(new Set(all.map((m) => m.title)).size).toBe(4);
    expect(new Set(all.map((m) => m.description)).size).toBe(4);
  });
});
