/**
 * 测试优化后的提示词对 MiniMax M2.7 的效果
 */

const axios = require('axios');
const fs = require('fs');
const path = require('path');
require('dotenv').config();

// 使用 MiniMax 官方 API
const MINI_MAX_CONFIG = {
  baseUrl: 'https://api.minimax.chat/v1',
  apiKey: process.env.MINIMAX_API_KEY || '',
  model: 'MiniMax-M2.7',
};

const OPTIMIZED_SYSTEM_PROMPT = `你是一位专业的图书策划编辑，擅长为各类主题设计清晰、严谨、有逻辑递进的书籍大纲。

## 你的职责
根据用户提供的书名、规模和主题，设计一份完整的书籍大纲。

## 工作要求
1. 分析主题复杂度，在允许的章节范围内决定最合适的章节数
2. 章节之间必须有清晰的逻辑递进关系（由浅入深、由理论到实践等）
3. 每章的知识点要具体，不能泛泛而谈
4. 预估字数要符合章节内容量
5. 核心知识点应独立成章，不要过度合并

## 输出格式要求（非常重要）
1. 必须且只能返回纯 JSON，不要任何解释、思考过程或其他文字
2. 不要使用 markdown 代码块标记
3. 不要包含任何标签（如details、think等）
4. 直接从 { 开始，到 } 结束
5. JSON 必须合法，可以被 JSON.parse 解析

## JSON 格式
{
  "mainTheme": "主题一句话描述",
  "structureLogic": "章节组织逻辑说明",
  "chapters": [
    {
      "number": 1,
      "title": "章节标题",
      "summary": "章节摘要（2-3句话）",
      "keyPoints": ["知识点1", "知识点2"],
      "estimatedWords": 2000
    }
  ]
}`;

async function callMiniMaxAPI(messages) {
  const response = await axios.post(
    `${MINI_MAX_CONFIG.baseUrl}/chat/completions`,
    {
      model: MINI_MAX_CONFIG.model,
      messages: messages,
      temperature: 0.7,
      max_tokens: 4000,
    },
    {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${MINI_MAX_CONFIG.apiKey}`,
      },
      timeout: 120000,
    }
  );

  return response.data.choices?.[0]?.message?.content;
}

function cleanAndParseJSON(response) {
  if (!response) return null;
  let cleaned = response.trim();
  cleaned = cleaned.replace(/[\u003C]details[\u003E][\s\S]*?[\u003C]\/details[\u003E]/g, '');
  cleaned = cleaned.replace(/[\u003C]think[\u003E][\s\S]*?[\u003C]\/think[\u003E]/g, '');
  cleaned = cleaned.replace(/```[\s\S]*?```/g, '');
  const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
  if (!jsonMatch) return null;
  try {
    return JSON.parse(jsonMatch[0]);
  } catch {
    return null;
  }
}

async function main() {
  console.log('=== 测试优化后的提示词 ===\n');
  console.log('模型: MiniMax-M2.7');
  console.log('主题: 操作系统引论\n');

  const startTime = Date.now();
  
  try {
    const content = await callMiniMaxAPI([
      { role: 'system', content: OPTIMIZED_SYSTEM_PROMPT },
      { role: 'user', content: '书名：《操作系统引论》\n规模：大学专业教材\n章节范围：10-12章' },
    ]);

    if (!content) {
      console.log('❌ API返回内容为空');
      return;
    }

    const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
    console.log(`⏱️ 耗时: ${elapsed}秒\n`);

    console.log('=== 原始输出（前500字符）===');
    console.log(content.substring(0, 500));
    console.log('...\n');

    const parsed = cleanAndParseJSON(content);
    
    if (parsed) {
      console.log('✅ JSON解析成功!\n');
      console.log(`📊 章节数: ${parsed.chapters?.length || 0}章`);
      console.log(`📖 主题: ${parsed.mainTheme}\n`);
      
      console.log('=== 章节结构 ===');
      parsed.chapters.forEach((ch) => {
        console.log(`第${ch.number}章 ${ch.title} (${ch.estimatedWords}字)`);
      });

      const resultDir = path.join(__dirname, 'test-results');
      if (!fs.existsSync(resultDir)) {
        fs.mkdirSync(resultDir, { recursive: true });
      }

      fs.writeFileSync(
        path.join(resultDir, 'minimax-optimized.json'),
        JSON.stringify({ time: elapsed, chapters: parsed.chapters.length, data: parsed }, null, 2)
      );

      console.log('\n✅ 结果已保存到 test-results/minimax-optimized.json');
    } else {
      console.log('❌ JSON解析失败');
      console.log('\n=== 完整输出 ===');
      console.log(content);
    }
  } catch (error) {
    console.error('❌ 测试失败:', error.message);
  }
}

main();
