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

const ROOT = '/Users/nancy/Documents/AICoding/VS_Code/tvu-design-system'
const PUBLISHED_MANIFEST = resolve(ROOT, 'figma-data/published/icons/manifest.json')
const CATALOG_INDEX = resolve(ROOT, 'src/icons/catalog/index.ts')
const PUBLISHED_ESM_INDEX_TYPES = resolve(ROOT, 'figma-data/published/icons/esm/index.d.ts')

describe('generated icon catalog artifacts', () => {
  it('keeps a published manifest with category/name records', () => {
    expect(existsSync(PUBLISHED_MANIFEST)).toBe(true)

    const manifest = JSON.parse(readFileSync(PUBLISHED_MANIFEST, 'utf8'))
    expect(Array.isArray(manifest.records)).toBe(true)
    expect(manifest.records.length).toBeGreaterThan(100)
    expect(manifest.records[0].name).toContain('/')
  })

  it('keeps a source catalog index for generated categories', () => {
    expect(existsSync(CATALOG_INDEX)).toBe(true)

    const source = readFileSync(CATALOG_INDEX, 'utf8')
    expect(source).toContain('export const iconCatalogRegistry')
    expect(source).toContain('resolveCatalogIcon')
  })

  it('publishes TypeScript declarations for per-category esm icons', () => {
    expect(existsSync(PUBLISHED_ESM_INDEX_TYPES)).toBe(true)

    const source = readFileSync(PUBLISHED_ESM_INDEX_TYPES, 'utf8')
    expect(source).toContain("export { default as SettingIcons } from './setting.js'")
  })
})
