"""
工作流注册表 - 主代理与 app 共用
主代理阶段四根据此配置路由到所有注册的子 agent；
app 据此执行对应工作流。
添加新工作流时，在此配置 WORKFLOW_CONFIG 与 ROUTE_DESCRIPTIONS。
"""
# ============================================================================
# =============== 工作流配置区域 - 添加新工作流时只需修改这里 ===============
# ============================================================================
# 格式：
#   "route_flag": {
#       "module": "workflows.workflow_xxx",
#       "function": "run_xxx_workflow",
#       "is_async": True/False,
#   }
# ============================================================================

WORKFLOW_CONFIG = {
    "fault_diagnosis": {
        "module": "workflows.workflow_fault_diagnosis",
        "function": "run_fault_diagnosis_workflow",
        "is_async": True,
    },
    "qa": {
        "module": "workflows.workflow_qa",
        "function": "run_qa_workflow",
        "is_async": True,
    },
    "问题排查": {
        "module": "workflows.workflow_fault_diagnosis",
        "function": "run_fault_diagnosis_workflow",
        "is_async": True,
    },
    "spare_parts_statistics": {
        "module": "workflows.workflow_spare_parts_statistics",
        "function": "run_spare_parts_statistics_workflow",
        "is_async": True,
    },
    "rules": {
        "module": "workflows.workflow_qa",
        "function": "run_qa_workflow",
        "is_async": True,
    },
    "other": {
        "module": "workflows.workflow_fault_diagnosis",
        "function": "run_fault_diagnosis_workflow",
        "is_async": True,
#
#        "module": "workflows.workflow_other",
#        "function": "run_other_workflow",
#        "is_async": True,
    },
    "report":{
#        "module": "workflows.workflow_qa_report",
#        "function": "run_qa_report_agent",
#        "is_async": True,
        "module": "workflows.workflow_fault_diagnosis",
        "function": "run_fault_diagnosis_workflow",
        "is_async": True,
    },
    "百科问答":{
        "module": "workflows.workflow_baike",
        "function": "run_baike_workflow",
        "is_async": True,
    },
    "操作使用":{
        "module": "workflows.workflow_operate",
        "function": "run_operate_workflow",
        "is_async": True,
    },
    "统计":{
        "module": "workflows.workflow_statistics",
        "function": "run_statistics_workflow",
        "is_async": True,
    }

}

# 路由标志 -> 任务分类描述（供主代理阶段四 LLM 使用）
ROUTE_DESCRIPTIONS = {
  "fault_diagnosis": """
   - 特征：用户描述**当前或近期发生的设备异常、报警、性能下降等具体故障现象**，需要分析原因或定位问题。
   - 关键词：报警、异常、异响、冒烟、过热、无法启动、突然停机、振动大、压力低、温度高、故障代码、不工作
   - 示例：
     • 主机滑油压力突然降到0.2MPa并报警  
     • 柴油机启动后冒黑烟且转速不稳  
     • 舵机发出异常噪音，疑似齿轮损坏  
   - 注意：若历史记录中包含“请补充”、“【需要更多信息】”，通常属于此类，因已聚焦具体故障场景。
     当用户问题中只有舷号、设备或故障现象时属于此类，舷号一般为连续的阿拉伯数字如“101”,"111","122","163"，"16","17","554","602","545","985","31","3261","799","905","781"等,或者数字后加舰，比如“101舰","199舰","18舰"等。
  """,

  "qa": """
   - 特征：询问定义、原理、结构、功能、分类、标准配置、常见类型、安全规范等**一般性知识**；也包括对专业术语、现象、部件作用的解释。  
     **即使问题表述模糊、不完整、缺少上下文，只要涉及船舶、机械、电气、动力等技术内容，均优先归为此类。**
   - 关键词：什么是、如何工作、为什么、请问、介绍、解释、有哪些、常见、典型、一般、作用、组成、是不是、叫什么
   - 示例：
     • 船舶主发动机有哪些常见故障类型？  
     • 涡轮增压器的工作原理是什么？  
     • 主机由哪些主要部件组成？  
     • 什么是MAN B&W柴油机？  
   - 注意：
     • **本类作为技术相关问题的默认兜底类别**——凡涉及设备、系统、部件、工况、参数等技术语境的问题，若无法明确归入 fault_diagnosis / repair / spare_parts_statistics / rules，则优先视为 qa。
  """,

  "repair": """
   - 特征：用户明确请求**维修方法、操作步骤、检修流程、更换方案或现场处理建议**，通常在已知故障或需预防性维护时提出。
   - 关键词：怎么修、如何维修、维修步骤、检修方法、更换、拆卸、安装、处理、修复、维护、保养、调整
   - 示例：
     • 主机喷油器漏油，怎么更换？  
     • 给出主机缸套磨损的维修方案  
     • 如何拆卸增压器进行检修？
  """,

  "spare_parts_statistics": """
   - 特征：用户需要对**备品备件的数量、使用记录、库存、消耗趋势、预测需求或成本分析**进行查询或统计。
   - 关键词：备件、备品、库存、数量、统计、预测、分析、消耗、需求、清单、台账、寿命、更换周期、用了多少、还剩多少
   - 示例：
     • 统计过去一年主机喷油嘴的使用数量  
     • 预测下季度所需空冷器备件数量  
     • 主机活塞环的平均更换周期是多少？
   - 注意：若仅问“某个部件是不是备件”或“这个备件叫什么名字”，属于知识问答（qa），而非本类。
  """,

  "rules": """
   - 特征：用户询问与船舶设备维修、检验、安全、环保、保密等相关的**国家法规、军用标准（如GJB）、行业规范、船级社要求或管理制度**。
   - 关键词：法规、标准、规范、规定、合规、条例、依据、要求、准则、制度、认证、资质、船级社、CCS、IMO、SOLAS、MARPOL、资格
   - 示例：
     • 船舶主机修理需遵循哪些GJB标准？  
     • IMO对主机排放有哪些强制要求？  
     • 舰船维修单位需要哪些资质？  
     • 保密资格申请流程是什么？
   - 注意：若问题提到“标准里有没有…”但未指明具体法规/标准名称，且无“法规”“标准”等关键词，可先归为 qa；一旦明确提及“法规”“标准”“规范”“SOLAS”等，则归为 rules。
  """,
  "other": """
  - 特征：**完全不涉及新的技术问题、故障诊断、维修请求、备件统计、法规查询或报告生成**，而是针对**已有对话内容、方案、步骤或文本的反馈、修正、补充、顺序调整或格式优化**。典型场景包括：
    • 指出之前提供的操作步骤有误（如“异物清理步骤有误”）
    • 要求调整操作顺序（如“这一步应当先怎样，然后再怎么操作，最后……”）
    • 对生成内容提出修改意见（如“步骤有误/有补充”“请重写第三点”）
    • 请求优化语言、格式或结构（如“请用更简洁的方式表达”）
    • 闲聊、非技术性确认或与当前技术任务无关的交互

  - 注意：
    • **只要用户意图是修正、补充或调整已有内容，而非提出新问题，即使涉及技术术语，也应归为 other**。
    • 不要将此类反馈误判为 repair 或 qa——它们不是在问“该怎么修”或“原理是什么”，而是在说“你刚才说的不对/不全”。
    • 此类通常出现在多轮对话中，是对前文输出的回应。
  """,
  "report": """
   - 特征：用户明确要求**生成、整理、导出或汇总**某种形式的文档、报表、清单或总结材料。通常涉及将分散的故障记录、维修历史、备件数据或问答内容整合成结构化文本（如日报、周报、故障分析报告、维修总结、备件消耗表等）。
   - 关键词：生成报告、写总结、导出表格、整理清单、汇总数据、形成文档、日报、周报、月报、分析报告、维修记录单、台账报表
   - 示例：
     • 请根据本周的故障记录生成一份主机系统运行分析报告
     • 总结这次对话
     • 导出过去一年的备件消耗统计报告
     • 帮我写一份关于此次主机停机事故的详细处理总结
  """
}

VALID_ROUTE_FLAGS = tuple(WORKFLOW_CONFIG.keys())
