import { describe, expect, it, vi } from 'vitest'

// 拦截 claude-adapter 的 SDK 重依赖，让 import './index' 在测试环境中能加载、
// 从而验证"import engine 即注册 ClaudeAdapter"的副作用链。
// （vitest 未配置 @/ alias，故用 vi.mock 在解析前拦截。）
vi.mock('@/lib/engine/adapters/claude/client', () => ({
  createForgeQuery: (() => ({})) as never,
}))
vi.mock('@anthropic-ai/claude-agent-sdk', () => ({}))

// 副作用 import：触发 claude-adapter 注册到 EngineRegistry
import './index'
import { EngineRegistry } from './registry'

describe('EngineRegistry (Phase 0)', () => {
  it('registers the Claude adapter on import', () => {
    const ids = EngineRegistry.list().map((e) => e.id)
    expect(ids).toContain('claude')
  })

  it('falls back to claude when backend is missing (zero-behavior-change for legacy sessions)', () => {
    expect(EngineRegistry.get(undefined).id).toBe('claude')
    expect(EngineRegistry.get('').id).toBe('claude')
  })

  it('exposes createQuery on the claude adapter', () => {
    const claude = EngineRegistry.get('claude')
    expect(claude.name).toBe('Claude Agent SDK')
    expect(typeof claude.createQuery).toBe('function')
  })

  it('routes an unknown backend to the claude fallback (Phase 0 contract)', () => {
    expect(() => EngineRegistry.get('__nonexistent_engine__')).not.toThrow()
    expect(EngineRegistry.get('__nonexistent_engine__').id).toBe('claude')
  })
})
