/**
 * Regression test: CapabilityMatrix nested supports structure
 *
 * Verifies that ProviderCapability uses a nested `supports` object
 * with all 17 fields, plus optional conversion, quality_tier, cost_tier.
 */

import { describe, test, expect } from 'bun:test'
import { readFileSync } from 'fs'
import { join } from 'path'

const SOURCE_PATH = join(
  import.meta.dir,
  '..',
  'src',
  'CapabilityMatrix.ts'
)

const source = readFileSync(SOURCE_PATH, 'utf-8')

describe('CapabilityMatrix nested supports structure', () => {
  test('ProviderCapability has nested supports object', () => {
    // The interface should declare a `supports: SupportsMap` field
    expect(source).toContain('supports: SupportsMap')
    // The SupportsMap interface should exist
    expect(source).toContain('export interface SupportsMap')
  })

  test('supports object includes 17 fields', () => {
    // Extract SupportsMap interface body
    const match = source.match(/export interface SupportsMap\s*\{([^}]+)\}/s)
    expect(match).not.toBeNull()

    const body = match![1]
    // Count field declarations (lines with a colon)
    const fields = body
      .split('\n')
      .map(line => line.trim())
      .filter(line => line.includes(':') && !line.startsWith('//'))

    expect(fields.length).toBe(17)
  })

  test('supports includes thinking, streaming, tool_use, prompt_cache', () => {
    expect(source).toContain('thinking: boolean')
    expect(source).toContain('streaming: boolean')
    expect(source).toContain('tool_use: boolean')
    expect(source).toContain('prompt_cache: boolean')
  })

  test('ProviderCapability has quality_tier and cost_tier', () => {
    expect(source).toContain('quality_tier')
    expect(source).toContain('cost_tier')
  })

  test('supports() method queries nested supports', () => {
    // The supports() method should access caps.supports[capability]
    expect(source).toContain('caps.supports[capability]')
  })
})
