/**
 * 需求文档解析工具
 * 将需求文档转换为范式配置
 */

/**
 * 构建需求解析的 Prompt
 */
export function buildRequirementParserPrompt(requirementText) {
  return `你是一位专业的文档分析专家，擅长提取文档中的核心要求并将其转化为结构化的写作范式配置。

【任务】
分析以下需求文档，提取关键要求并生成"范式配置"，用于指导AI写作和检查文稿。

【需求文档】
${requirementText}

【输出要求】
请生成以下四个部分，使用JSON格式输出：

1. **specializedPrompt** (string): 系统提示词，包含：
   - 会议主题/文档目标
   - 核心要求（列表形式）
   - 论述规范（结构要求、术语规范、语气要求等）
   长度：300-500字

2. **sections** (array): 文章章节大纲，每个章节是实际需要撰写的内容部分：
   - title (string): 章节标题（如"开篇引言"、"问题查摆"、"整改措施"）
   - description (string): 该章节应包含的内容说明
   - weight (number): 该章节在全文中的建议篇幅占比（0-100，所有章节总和=100）
   数量：3-6个章节

3. **expertGuidelines** (array): 专家检查指令（用于检验生成内容是否合规，不是章节）：
   - title (string): 检查项名称（如"五维度覆盖"、"术语规范"）
   - description (string): 具体检查标准
   - scope (string): 检查粒度 - "sentence" | "paragraph" | "document"
   数量：8-12条
   
   **重要**：expertGuidelines 是检查规范，不是章节标题！
   - 正确示例："五维度覆盖" → 检查文稿是否涵盖五个维度
   - 错误示例：把"问题查摆"作为 expertGuideline（这应该放在 sections）

4. **metadata** (object): 元数据，包含：
   - name (string): 范式名称（简短，10字以内）
   - description (string): 范式描述（30字以内）
   - keyRequirements (array): 核心要求关键词（3-5个）

【输出格式】
\`\`\`json
{
  "specializedPrompt": "你是一位资深的...",
  "sections": [
    {"title": "开篇引言", "description": "说明会议背景、主题和目的", "weight": 15},
    {"title": "问题查摆", "description": "从五个维度进行深入查摆分析", "weight": 60},
    {"title": "整改措施", "description": "针对问题提出具体整改方向", "weight": 25}
  ],
  "expertGuidelines": [
    {"title": "五维度覆盖", "description": "检查问题查摆是否涵盖政治忠诚、党性修养等五个维度", "scope": "document"},
    {"title": "核心篇幅占比", "description": "检查问题查摆部分是否占全文60%以上", "scope": "document"},
    {"title": "党内术语规范", "description": "检查是否正确使用中央文件表述", "scope": "sentence"}
  ],
  "metadata": {
    "name": "范式名称",
    "description": "范式描述",
    "keyRequirements": ["要求1", "要求2", "要求3"]
  }
}
\`\`\`

【注意事项】
1. **sections 与 expertGuidelines 的区别**：
   - sections = 需要撰写的章节（如"开篇引言"、"问题分析"）
   - expertGuidelines = 检验标准（如"篇幅占比"、"术语规范"）
2. specializedPrompt 应该完整、系统，涵盖所有关键要求
3. 保留原文中的专业术语和标准表述
4. scope 分配原则：sentence（1-5句）、paragraph（6-20句）、document（21+句）

请开始分析并生成范式配置。`;
}

/**
 * 解析AI返回的范式配置
 * @param {string} aiResponse - AI返回的文本
 * @returns {Object|null} 解析后的范式配置，失败返回null
 */
export function parseParadigmConfig(aiResponse) {
  try {
    // 调试：输出原始响应
    console.log('AI 原始响应长度:', aiResponse.length);
    console.log('AI 原始响应内容（前500字符）:', aiResponse.substring(0, 500));

    // 检查响应是否为空
    if (!aiResponse || aiResponse.trim().length === 0) {
      console.error('AI 返回内容为空');
      return null;
    }

    // 尝试提取 JSON 代码块
    const jsonMatch = aiResponse.match(/```json\s*([\s\S]*?)\s*```/);
    let jsonText = jsonMatch ? jsonMatch[1] : aiResponse;

    console.log('提取的 JSON 文本（前200字符）:', jsonText.substring(0, 200));

    // 移除可能的注释
    jsonText = jsonText.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*/g, '');

    const config = JSON.parse(jsonText);

    // 验证必需字段
    if (!config.specializedPrompt || !config.metadata) {
      console.error('配置缺少必需字段:', {
        hasPrompt: !!config.specializedPrompt,
        hasMetadata: !!config.metadata
      });
      throw new Error('缺少必需字段');
    }

    // sections 可选，如果没有则生成默认章节
    if (!Array.isArray(config.sections) || config.sections.length === 0) {
      console.warn('配置中缺少 sections，将使用默认章节');
      config.sections = [
        { title: '开篇引言', description: '文章背景与目的', weight: 20 },
        { title: '核心内容', description: '主要论述', weight: 60 },
        { title: '总结与展望', description: '总结与下一步', weight: 20 }
      ];
    }

    // expertGuidelines 可选
    if (!Array.isArray(config.expertGuidelines)) {
      config.expertGuidelines = [];
    }

    return config;
  } catch (error) {
    console.error('解析范式配置失败:', error);
    console.error('完整的 AI 响应:', aiResponse);
    return null;
  }
}

/**
 * 将解析的配置转换为完整的范式对象
 * @param {Object} parsedConfig - 解析后的配置
 * @param {string} sourceDocPath - 源需求文档路径（可选）
 * @returns {Object} 完整的范式对象
 */
export function buildParadigmObject(parsedConfig, sourceDocPath = null) {
  const timestamp = Date.now();
  const id = `custom-${timestamp}`;

  return {
    id,
    name: parsedConfig.metadata.name,
    description: parsedConfig.metadata.description,
    type: 'custom',
    isCustom: true, // 标记为自定义范式
    createdAt: new Date().toISOString(),
    sourceDoc: sourceDocPath,

    // UI 显示必需字段
    icon: parsedConfig.metadata.icon || 'sparkles', // 默认使用 sparkles 图标
    tagClass: parsedConfig.metadata.tagClass || 'bg-purple-900/30 text-purple-300', // 默认紫色
    tags: parsedConfig.metadata.keyRequirements || [], // 使用关键要求作为标签

    specializedPrompt: parsedConfig.specializedPrompt,
    sections: parsedConfig.sections || [], // 章节大纲
    expertGuidelines: parsedConfig.expertGuidelines,

    // 可选：继承默认的逻辑范式和维度集
    logicParadigms: null, // 由使用者决定是否继承
    dimensionSetId: null,
    defaultReference: null,

    // 元数据
    metadata: {
      ...parsedConfig.metadata,
      customGenerated: true
    }
  };
}

/**
 * 验证范式配置的完整性
 * @param {Object} paradigm - 范式对象
 * @returns {Object} 验证结果 { valid: boolean, errors: string[] }
 */
export function validateParadigm(paradigm) {
  const errors = [];

  if (!paradigm.name || paradigm.name.trim().length === 0) {
    errors.push('范式名称不能为空');
  }

  if (!paradigm.specializedPrompt || paradigm.specializedPrompt.length < 100) {
    errors.push('specializedPrompt 内容过短，建议至少300字');
  }

  if (!Array.isArray(paradigm.expertGuidelines) || paradigm.expertGuidelines.length < 5) {
    errors.push('expertGuidelines 至少需要5条指令');
  }

  if (paradigm.expertGuidelines) {
    paradigm.expertGuidelines.forEach((guideline, index) => {
      // 兼容字符串和对象格式
      if (typeof guideline === 'string') {
        if (guideline.trim().length === 0) {
          errors.push(`第${index + 1}条指令为空`);
        }
      } else if (typeof guideline === 'object') {
        // 对象格式：检查 description 字段
        if (!guideline.description || guideline.description.trim().length === 0) {
          errors.push(`第${index + 1}条指令的描述为空`);
        }
        if (!guideline.scope || !['sentence', 'paragraph', 'document'].includes(guideline.scope)) {
          errors.push(`第${index + 1}条指令的 scope 字段无效`);
        }
      } else {
        errors.push(`第${index + 1}条指令格式错误`);
      }
    });
  }

  return {
    valid: errors.length === 0,
    errors
  };
}
