/**
 * CLI - 命令行接口
 */

// 加载环境变量
require('dotenv').config();

const { Command } = require('commander');
const registry = require('./index');
const logger = require('./shared/logger');
const packageJson = require('../package.json');

const program = new Command();

// 主程序配置
program
  .name('aam')
  .description('Auto Account Machine - 自动化工具集')
  .version(packageJson.version);

// 注册card-generator命令
const cardTool = registry.get('card-generator');
if (cardTool) {
  const cardCommand = program
    .command('card')
    .description('生成虚拟信用卡号')
    .option('-t, --type <type>', '卡类型 (unionpay, visa, mastercard, amex, discover)', 'unionpay')
    .option('-n, --count <number>', '生成数量', '1')
    .option('-f, --format <format>', '输出格式 (pipe, json, csv, pretty)', 'pipe')
    .action((options) => {
      cardTool.execute(options);
    });

  // 添加子命令
  cardCommand
    .command('list-types')
    .description('列出所有支持的卡类型')
    .action(() => {
      cardTool.listTypes();
    });

  cardCommand
    .command('list-formats')
    .description('列出所有支持的输出格式')
    .action(() => {
      cardTool.listFormats();
    });
}

// 注册account-register命令
const registerTool = registry.get('account-register');
if (registerTool) {
  const registerCommand = program
    .command('register')
    .description('自动注册账号')
    .option('-s, --site <site>', '网站名称 (windsurf, etc)')
    .option('--dry-run', '干运行模式：只生成数据不执行注册', false)
    .option('-f, --format <format>', '输出格式 (simple, json, table)', 'simple')
    .option('-o, --output <file>', '保存账号数据到文件')
    .option('--from-step <number>', '从第几步开始执行', '1')
    .option('--to-step <number>', '执行到第几步（不指定则执行全部）')
    .option('--password-strategy <strategy>', '密码策略 (email=使用邮箱, random=随机)', 'email')
    .option('--keep-browser-open', '保持浏览器打开', false)
    .action(async (options) => {
      // 转换步骤参数为数字
      if (options.fromStep) options.fromStep = parseInt(options.fromStep);
      if (options.toStep) options.toStep = parseInt(options.toStep);
      await registerTool.execute(options);
    });

  // 添加子命令
  registerCommand
    .command('list')
    .description('列出所有支持的网站')
    .action(() => {
      registerTool.listSites();
    });

  registerCommand
    .command('generate')
    .description('只生成账号数据（不执行注册）')
    .option('-f, --format <format>', '输出格式', 'simple')
    .action((options) => {
      registerTool.generate(options);
    });

  registerCommand
    .command('list-formats')
    .description('列出所有支持的输出格式')
    .action(() => {
      registerTool.listFormats();
    });
}

// 列出所有工具
program
  .command('list')
  .description('列出所有可用工具')
  .action(() => {
    const tools = registry.getAll();
    console.log('\n可用工具:\n');
    tools.forEach(tool => {
      const alias = tool.alias ? ` (${tool.alias})` : '';
      console.log(`  ${tool.name}${alias.padEnd(20)} - ${tool.description}`);
    });
    console.log('');
  });

// 帮助信息增强
program.on('--help', () => {
  console.log('');
  console.log('Examples:');
  console.log('  # 信用卡生成器');
  console.log('  $ aam card                              # 生成一张默认银联卡');
  console.log('  $ aam card -t visa                      # 生成一张Visa卡');
  console.log('  $ aam card -t unionpay -n 10            # 生成10张银联卡');
  console.log('  $ aam card list-types                   # 查看支持的卡类型');
  console.log('');
  console.log('  # 账号注册工具');
  console.log('  $ aam register -s windsurf --dry-run    # 生成Windsurf账号数据');
  console.log('  $ aam register -s windsurf              # 执行Windsurf注册');
  console.log('  $ aam register list                     # 列出支持的网站');
  console.log('  $ aam register generate                 # 生成通用账号数据');
  console.log('');
  console.log('  # 其他');
  console.log('  $ aam list                              # 列出所有工具');
  console.log('');
});

// 解析命令
program.parse(process.argv);

// 如果没有参数，显示帮助
if (!process.argv.slice(2).length) {
  program.outputHelp();
}
