/**
 * Foliko CLI 主逻辑
 */

const { chatCommand } = require('./commands/chat');
const { listCommand } = require('./commands/list');
const { pluginCommand } = require('./commands/plugin');
const fs = require('fs');
const path = require('path');
/**
 * CLI 主入口
 */
async function cli() {
  const args = process.argv.slice(2);
  let command = args[0] || 'chat';
  const packageJsonPath = path.join(__dirname, '../../package.json');

  // 如果第一个参数看起来像选项而不是命令，说明用户直接运行 "npm run chat -c ..."
  // 把命令设为 'chat'，所有参数都传给 chat 命令
  if (command && command.startsWith('-')) {
    command = 'chat';
  }

  switch (command) {
    case 'chat':
      // 如果第一个参数是选项（如 -c），args 已经是传给 chat 的参数
      // 如果第一个参数是 'chat'，需要 slice(1) 去掉 'chat'
      const chatArgs = args[0] === 'chat' ? args.slice(1) : args;
      await chatCommand(chatArgs);
      break;

    case 'list':
    case 'ls':
      await listCommand();
      break;

    case 'plugin':
    case 'plugins':
      await pluginCommand(args.slice(1));
      break;

    case 'help':
    case '--help':
    case '-h':
      printHelp();
      break;

    case 'version':
    case '--version':
    case '-v':
      const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
      console.log(`${packageJson.name} v${packageJson.version}`);
      break;

    default:
      console.error(`Unknown command: ${command}`);
      console.error('Run "foliko help" for usage information');
      process.exit(1);
  }
}

/**
 * 打印帮助信息
 */
function printHelp() {
  console.log(`
Foliko CLI - Agent 框架的命令行工具

Usage: foliko <command> [options]

Commands:
  chat              启动持续对话聊天
  list              列出所有子Agent配置
  plugin            插件管理 (publish/install/list)
  help              显示帮助信息
  version           显示版本号

Chat Options:
  --model <name>    指定 AI 模型
  --provider <name> 指定 AI 提供商
  --base-url <url>  指定 API 基础地址

Examples:
  foliko chat
  foliko chat --model MiniMax-M2.7
  foliko chat --provider minimax --base-url https://api.minimaxi.com/v1
  foliko list
`);
}

module.exports = { cli };
