/**
 * C5 regression: CapabilityTrustLevel wrong enum values
 * Bug: used core/trusted/untrusted (3 values) instead of spec's 5-level hierarchy.
 * Fix: import CapabilityTrustLevel from contracts, use 5 values.
 */

import { describe, it, expect } from 'bun:test'
import { CapabilityManifestValidator } from '../../src/capabilities/CapabilityManifestValidator.js'
import { readFileSync } from 'fs'
import { join } from 'path'

describe('C5: CapabilityTrustLevel 5-level enum', () => {
  const src = readFileSync(
    join(import.meta.dir, '..', '..', 'src', 'capabilities', 'CapabilityManifestValidator.ts'),
    'utf-8'
  )

  it('imports CapabilityTrustLevel from contracts', () => {
    expect(src).toContain('CapabilityTrustLevel')
    expect(src).toContain('@aircoding/contracts')
  })

  it('TRUST_LEVELS contains all 5 spec values', () => {
    const match = src.match(/TRUST_LEVELS[^=]*=\s*\[([^\]]+)\]/)
    expect(match).not.toBeNull()
    const levels = match![1]
    expect(levels).toContain('built_in')
    expect(levels).toContain('project_local')
    expect(levels).toContain('user_installed')
    expect(levels).toContain('verified_publisher')
    expect(levels).toContain('untrusted')
  })

  it('TRUST_LEVELS does not contain legacy values', () => {
    const match = src.match(/TRUST_LEVELS[^=]*=\s*\[([^\]]+)\]/)
    expect(match).not.toBeNull()
    const levels = match![1]
    expect(levels).not.toContain("'core'")
    expect(levels).not.toContain("'trusted'")
  })

  it('validate accepts manifest with trust_level=built_in', () => {
    const validator = new CapabilityManifestValidator()
    const result = validator.validate({
      schema_version: 1,
      name: 'test-cap',
      version: '1.0.0',
      tools: [],
      trust_level: 'built_in',
    })
    expect(result.valid).toBe(true)
  })

  it('validate rejects manifest with trust_level=core', () => {
    const validator = new CapabilityManifestValidator()
    const result = validator.validate({
      schema_version: 1,
      name: 'test-cap',
      version: '1.0.0',
      tools: [],
      trust_level: 'core',
    })
    expect(result.valid).toBe(false)
  })
})
