import { describe, expect, it } from 'vitest'
import { buildUrlEntry, renderSitemapIndex, renderUrlSet } from './sitemap.js'

describe('@platform-modules/seo/sitemap', () => {
  it('renderSitemapIndex emits valid XML with entity-escaped loc values', () => {
    const xml = renderSitemapIndex([
      { loc: 'https://example.com/sitemap-posts.xml', lastmod: '2026-06-01' },
      { loc: 'https://example.com/sitemap-<nodes>.xml' },
    ])
    expect(xml).toMatch(/^<\?xml version="1.0"/)
    expect(xml).toContain('<sitemapindex')
    expect(xml).toContain('&lt;nodes&gt;')
    expect(xml).not.toContain('<nodes>')
  })

  it('renderUrlSet round-trips url entries with hreflang alternates', () => {
    const entry = buildUrlEntry('https://example.com/deals?a=1&b=2', {
      lastmod: '2026-06-15',
      hrefLangs: [
        { hreflang: 'en', href: 'https://example.com/en/deals' },
        { hreflang: 'he', href: 'https://example.com/he/deals' },
      ],
    })
    const xml = renderUrlSet([entry])
    expect(xml).toContain('<urlset')
    expect(xml).toContain('https://example.com/deals?a=1&amp;b=2')
    expect(xml).toContain('hreflang="en"')
    expect(xml).toContain('hreflang="he"')
  })

  it('buildUrlEntry omits lastmod and hrefLangs when absent', () => {
    const entry = buildUrlEntry('https://example.com/page')
    expect(entry).toEqual({ loc: 'https://example.com/page' })
    expect('lastmod' in entry).toBe(false)
    expect('hrefLangs' in entry).toBe(false)
  })

  it('renderers emit a well-formed empty document for an empty array', () => {
    const urlset = renderUrlSet([])
    expect(urlset).toContain('<urlset')
    expect(urlset).toContain('</urlset>')
    expect(urlset).not.toContain('<url>')

    const index = renderSitemapIndex([])
    expect(index).toContain('<sitemapindex')
    expect(index).toContain('</sitemapindex>')
    expect(index).not.toContain('<sitemap>')
  })
})
