import fs from 'node:fs'
import path from 'node:path'
import { describe, expect, it } from 'vitest'

import { figmaFirstComponentRegistry, figmaFirstPublicExports } from '../playground/docs/figmaFirstRegistry'
import { navigationGroups } from '../playground/docs/navigation'
import * as publicIndex from '../src/index'

const DOCS_ROOT = '/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system/playground/docs'
const DOCS_PAGES_ROOT = path.join(DOCS_ROOT, 'pages')

describe('Figma-first contract', () => {
  it('covers every public Figma-first export with a docs page registry entry', () => {
    const exportedNames = Object.keys(publicIndex).filter((name) => name !== 'default')

    for (const exportName of figmaFirstPublicExports) {
      expect(exportedNames).toContain(exportName)
    }
  })

  it('registers every Figma-first component page in navigation', () => {
    const navigationIds = new Set(navigationGroups.flatMap((group) => group.items.map((item) => item.id)))

    for (const record of figmaFirstComponentRegistry) {
      expect(navigationIds.has(record.pageId)).toBe(true)
    }
  })

  it('keeps component docs pages on canonical imports', () => {
    for (const record of figmaFirstComponentRegistry) {
      const pageSource = fs.readFileSync(path.join(DOCS_PAGES_ROOT, record.pageFile), 'utf8')

      expect(pageSource).toMatch(/(?:\.\.\/\.\.\/\.\.\/|@\/)src\/(?:canonical\/|index['"])/)
      expect(pageSource).not.toMatch(/(?:\.\.\/\.\.\/\.\.\/|@\/)src\/components\//)
    }
  })

  it('loads every registered component page in DocsShell', () => {
    const docsShellSource = fs.readFileSync(path.join(DOCS_ROOT, 'DocsShell.vue'), 'utf8')

    for (const record of figmaFirstComponentRegistry) {
      expect(docsShellSource).toMatch(new RegExp(`(?:'${record.pageId}'|${record.pageId}):`))
    }
  })
})
