const test = require('node:test')
const assert = require('node:assert')
const {
  assertFileIsBilditWebTemplate,
  describeBilditTemplateKindForLog,
  NOT_A_BILDIT_TEMPLATE_MESSAGE,
} = require('../src/lib/template-meta')

test('assertFileIsBilditWebTemplate allows v1 $() fields', () => {
  assertFileIsBilditWebTemplate('const x = $(a:String="hi")\nexport default function F() {}', 'jsx')
})

test('assertFileIsBilditWebTemplate allows v2 @type', () => {
  assertFileIsBilditWebTemplate(
    '/** @type {String} */\nconst a = "x"\nexport default function F() {}',
    'tsx',
  )
})

test('assertFileIsBilditWebTemplate skips html', () => {
  assertFileIsBilditWebTemplate('<div />', 'html')
})

test('assertFileIsBilditWebTemplate throws for plain component', () => {
  assert.throws(
    () => assertFileIsBilditWebTemplate('export default function Hero() { return null }', 'tsx'),
    (e) => e.message === NOT_A_BILDIT_TEMPLATE_MESSAGE,
  )
})

test('describeBilditTemplateKindForLog legacy vs v2', () => {
  assert.match(describeBilditTemplateKindForLog('const x = $(a:String)', 'jsx'), /legacy v1/)
  assert.match(
    describeBilditTemplateKindForLog('/** @type {String} */\nconst a = ""', 'tsx'),
    /v2/,
  )
})
