#!/usr/bin/env node

/**
 * inject-minimax.js
 *
 * 注入 MiniMax 模型配置到 openclaw.json，并为所有 agent 写入 API Key。
 *
 * 做以下事情：
 *   1. 设置 minimax auth profile (openclaw.json)
 *   2. 注册 minimax provider + 模型定义 (openclaw.json)
 *   3. 设置默认聊天模型为 MiniMax (openclaw.json)
 *   4. 将 MiniMax 模型加入白名单 (openclaw.json)
 *   5. 为所有 agent 写入 API Key (auth-profiles.json，不存在则创建)
 *
 * 不触碰: 图片模型、其他 provider、onboard 流程
 *
 * 入口: myclaw inject-minimax [--key sk-xxx]
 */

const fs = require('fs');
const path = require('path');
const os = require('os');
const { readConfig, writeConfig } = require('../find-config');

const DEFAULT_MINIMAX_KEY = "sk-cp-DC5lWd2Stt9CBFzLIT2awP4K-ZEn5AkYwjl3Cdj-mIBmgjxod518F2LaVF2L9c35Wv5-Eox0F1ctJD5vXtB9p3OmxoWLd9ge9zIUIMrCVuqBYdL_s6kb8Qs";

function run(cliArgs) {
  // 解析参数
  let apiKey = null;
  let forceDefault = false;
  for (let i = 0; i < cliArgs.length; i++) {
    if (cliArgs[i] === '--key' && cliArgs[i + 1]) {
      apiKey = cliArgs[i + 1];
      i++;
    } else if (cliArgs[i] === '--force') {
      forceDefault = true;
    }
  }

  if (!apiKey) {
    apiKey = DEFAULT_MINIMAX_KEY;
    console.log('💡 未传入 --key 参数，使用默认 API Key');
  }

  // 读取配置
  let config, configPath;
  try {
    ({ config, configPath } = readConfig());
  } catch (err) {
    console.error('❌ ' + err.message);
    process.exit(1);
  }

  console.log('📍 找到配置: ' + configPath);

  // ─── 1. auth profile ───
  if (!config.auth) config.auth = {};
  if (!config.auth.profiles) config.auth.profiles = {};
  config.auth.profiles["minimax:cn"] = {
    provider: "minimax",
    mode: "api_key"
  };

  // ─── 2. minimax provider + 模型定义 ───
  if (!config.models) config.models = {};
  if (!config.models.mode) config.models.mode = "merge";
  if (!config.models.providers) config.models.providers = {};

  config.models.providers.minimax = {
    baseUrl: "https://api.minimaxi.com/anthropic",
    api: "anthropic-messages",
    authHeader: true,
    models: [
      {
        id: "MiniMax-M3",
        name: "MiniMax M3",
        reasoning: true,
        input: ["text"],
        cost: {
          input: 0.3,
          output: 1.2,
          cacheRead: 0.06,
          cacheWrite: 0.375
        },
        contextWindow: 204800,
        maxTokens: 131072
      }
    ]
  };

  // ─── 3. 默认聊天模型 ───
  if (!config.agents) config.agents = {};
  if (!config.agents.defaults) config.agents.defaults = {};
  if (forceDefault) {
    config.agents.defaults.model = {
      primary: "minimax/MiniMax-M3"
    };
    console.log('⚡ --force: 已覆盖默认模型为 minimax/MiniMax-M3');
  } else {
    console.log('⊘ 跳过默认模型设置 (传入 --force 可覆盖)');
  }

  // ─── 4. 白名单，清理残留 ───
  if (!config.agents.defaults.models) config.agents.defaults.models = {};
  config.agents.defaults.models["minimax/MiniMax-M3"] = {};
  delete config.agents.defaults.models["minimax/MiniMax-M2.7"];
  delete config.agents.defaults.models["minimax/MiniMax-M2.7-highspeed"];

  // ─── 写入 openclaw.json ───
  writeConfig(config, configPath);
  console.log('✅ openclaw.json 已更新');

  // ─── 5. 为所有 agent 写入 auth-profiles.json ───
  // 始终包含 main agent 默认路径，防止 fresh onboard 后 agents.list 为空
  const DEFAULT_MAIN_DIR = path.join(os.homedir(), '.openclaw', 'agents', 'main', 'agent');
  const agentList = (config.agents && config.agents.list) || [];

  // 构建去重的 agentDir 列表，main 默认路径始终存在
  const agentDirs = new Map();
  agentDirs.set(DEFAULT_MAIN_DIR, 'main');
  for (const agent of agentList) {
    if (agent.agentDir) agentDirs.set(agent.agentDir, agent.id);
  }

  let okCount = 0;
  let skipCount = 0;

  for (const [agentDir, agentId] of agentDirs) {
    const profilesPath = path.join(agentDir, 'auth-profiles.json');

    // 读取现有文件，不存在则初始化骨架
    let profiles = { version: 1, profiles: {}, lastGood: {} };
    if (fs.existsSync(profilesPath)) {
      try {
        const parsed = JSON.parse(fs.readFileSync(profilesPath, 'utf8'));
        if (parsed.profiles) profiles = parsed;
        if (!profiles.lastGood) profiles.lastGood = {};
      } catch { /* 解析失败则用空骨架 */ }
    }

    // 写入 minimax:cn，保留其他 profile 不动
    profiles.profiles["minimax:cn"] = {
      type: "api_key",
      provider: "minimax",
      key: apiKey
    };
    profiles.lastGood["minimax"] = "minimax:cn";

    try {
      if (!fs.existsSync(agentDir)) fs.mkdirSync(agentDir, { recursive: true });
      fs.writeFileSync(profilesPath, JSON.stringify(profiles, null, 2) + '\n', 'utf8');
      console.log('  ✅ ' + agentId);
      okCount++;
    } catch (err) {
      console.log('  ⚠ ' + agentId + ': ' + err.message);
      skipCount++;
    }
  }

  console.log('');
  console.log('✅ MiniMax 注入完成');
  console.log('  模型:  MiniMax-M3');
  console.log('  默认:  minimax/MiniMax-M3');
  console.log('  Agent: ' + okCount + ' 个写入，' + skipCount + ' 个跳过');
  console.log('');
}

module.exports = { run };
