/**
 * 简单的模块化测试
 * 测试新的面向对象架构基本功能
 */

import { CredentialService } from '../services/CredentialService'
import { FileCredentialRepository } from '../services/repositories/FileCredentialRepository'
import { PacificaSignatureProvider } from '../services/providers/PacificaSignatureProvider'

async function testModularArchitecture() {
  console.log('🚀 开始测试模块化凭据服务架构')

  try {
    // 1. 创建依赖组件
    console.log('📦 创建依赖组件...')

    const repository = new FileCredentialRepository('./credentials.json')
    console.log('✅ 创建文件仓储成功')

    const providers = new Map()
    providers.set('pacifica', new PacificaSignatureProvider())
    console.log('✅ 创建签名提供者成功')

    // 2. 创建主服务
    console.log('🔧 组装主服务...')
    const service = new CredentialService(repository, providers, {
      autoInitialize: false,
      enableWatching: false,
      performanceTracking: true,
    })
    console.log('✅ 创建凭据服务成功')

    // 3. 手动初始化
    console.log('🔄 初始化服务...')
    await service.initialize()
    console.log('✅ 服务初始化成功')

    // 4. 获取服务状态
    console.log('📊 获取服务状态...')
    const status = service.getStatus()
    console.log(`✅ 服务状态:`)
    console.log(`   - 已初始化: ${status.initialized}`)
    console.log(`   - 总账户数: ${status.totalAccounts}`)
    console.log(`   - 支持平台: ${service.getSupportedPlatforms().join(', ')}`)

    // 5. 测试平台信息
    const providerInfo = service.getProviderInfo('pacifica')
    if (providerInfo) {
      console.log(`✅ Pacifica 提供者信息:`)
      console.log(`   - 算法: ${providerInfo.algorithm}`)
      console.log(`   - 平台ID: ${providerInfo.platformId}`)
    }

    // 6. 清理资源
    console.log('🧹 清理资源...')
    await service.dispose()
    console.log('✅ 资源清理完成')

    console.log('\n🎉 模块化架构测试成功！')
    console.log('🏆 新架构的优势:')
    console.log('  ✨ 依赖注入 - 组件可替换、易测试')
    console.log('  ✨ 接口抽象 - 代码解耦、扩展性强')
    console.log('  ✨ 单一职责 - 每个类职责明确')
    console.log('  ✨ 配置灵活 - 支持多种配置模式')
  } catch (error) {
    console.error('❌ 模块化架构测试失败:', error.message)
    console.error(error.stack)
  }
}

// 运行测试
if (import.meta.url === `file://${process.argv[1]}`) {
  testModularArchitecture()
}
