export type HelpImage = {
  src: string;
  alt: string;
  caption: string;
};

export type HelpArticle = {
  id: string;
  title: string;
  category: string;
  keywords: string[];
  scenario: string;
  entry: string;
  steps: string[];
  requiredFields: string[];
  statusFlow: string[];
  notes: string[];
  images: HelpImage[];
  relatedIds: string[];
};

function helpImage(name: string, alt: string, caption: string): HelpImage {
  return {
    src: `/help/wenfan-xiaobao/${name}.png`,
    alt,
    caption,
  };
}

export const WENFAN_HELP_ARTICLES: HelpArticle[] = [
  {
    id: 'product-create',
    title: '产品如何新建',
    category: '产品',
    keywords: [
      '产品',
      '产品管理',
      '新建产品',
      '创建产品',
      '新增产品',
      '产品怎么建',
      '怎么新建产品',
      '产品要填什么',
      '产品字段',
      '产品名称',
      '产品负责人',
      '顶层容器',
    ],
    scenario: '当你要把一个业务系统、客户项目或产品线作为顶层容器管理时，先创建产品。',
    entry: '左侧导航栏 -> 产品 -> 新建产品',
    steps: [
      '进入“产品”页面。',
      '点击页面右上角的新建产品按钮。',
      '填写产品名称、负责人、说明等信息。',
      '保存后，产品会出现在产品列表中，后续项目、版本和需求都围绕产品展开。',
    ],
    requiredFields: ['产品名称', '负责人', '产品描述或备注（建议填写，方便团队识别）'],
    statusFlow: ['产品本身没有复杂状态流转，主要作为项目、版本和需求的顶层归属。'],
    notes: [
      '产品不要和项目混用：产品是顶层容器，项目是产品下的执行范围。',
      '产品名称建议稳定，后续项目和版本会引用它。',
    ],
    images: [helpImage('product-create', '产品页面截图', '在产品页面创建产品。')],
    relatedIds: ['project-create', 'requirement-pool', 'version-create'],
  },
  {
    id: 'project-create',
    title: '项目如何新建',
    category: '项目',
    keywords: [
      '项目',
      '项目管理',
      '新建项目',
      '创建项目',
      '新增项目',
      '项目怎么建',
      '项目归属产品',
      '项目字段',
      '项目负责人',
      '项目成员',
      '项目和产品',
    ],
    scenario: '当一个产品下需要拆出具体交付范围、团队或客户实施范围时，创建项目。',
    entry: '左侧导航栏 -> 项目 -> 新建项目',
    steps: [
      '进入“项目”页面。',
      '点击新建项目按钮。',
      '选择归属产品。',
      '填写项目名称、负责人、项目类型、说明等信息。',
      '保存后，可以继续在项目下创建版本和关联需求。',
    ],
    requiredFields: ['归属产品', '项目名称', '项目负责人', '项目类型'],
    statusFlow: ['项目作为执行容器，版本和任务状态会在项目下汇总。'],
    notes: [
      '一个产品可以有多个项目。',
      '项目创建后，需求纳入版本时会按当前项目范围筛选候选需求。',
    ],
    images: [helpImage('project-create', '项目页面截图', '在项目页面创建项目并选择归属产品。')],
    relatedIds: ['product-create', 'version-create', 'version-requirement-include'],
  },
  {
    id: 'version-create',
    title: '版本如何新建',
    category: '版本',
    keywords: [
      '版本',
      '版本号',
      '新建版本',
      '创建版本',
      '新增版本',
      '版本怎么建',
      '版本字段',
      '预期发布日期',
      '发版日期',
      '版本成员',
      '项目开发类型',
      '版本状态',
    ],
    scenario: '当项目进入一次明确的交付或发版周期时，创建版本承载计划、开发、测试和发布风险。',
    entry: '左侧导航栏 -> 版本 -> 新建版本',
    steps: [
      '进入“版本”页面。',
      '点击新建版本按钮。',
      '选择产品和项目。',
      '填写版本号、版本名称、项目开发类型、预期发布日期。',
      '添加版本成员，保存版本。',
    ],
    requiredFields: ['产品', '项目', '版本号', '版本名称', '项目开发类型', '预期发布日期', '版本成员'],
    statusFlow: ['计划中', '开发中', '已发布', '已关闭', '已暂停'],
    notes: [
      '版本是执行主线，需求、计划、开发任务、测试用例和 Bug 都围绕版本聚合。',
      '预期发布日期会影响小宝预警的风险判断。',
    ],
    images: [helpImage('version-create', '版本页面截图', '在版本页面创建版本并维护版本信息。')],
    relatedIds: ['project-create', 'version-requirement-include', 'xiaobao-warning'],
  },
  {
    id: 'requirement-pool',
    title: '需求池如何新建和采纳需求',
    category: '需求池',
    keywords: [
      '需求',
      '需求池',
      '新建需求',
      '创建需求',
      '新增需求',
      '需求怎么建',
      '需求字段',
      '需求采纳',
      '采纳需求',
      '通过需求',
      '需求状态',
      '需求评审',
      '需求进入版本',
    ],
    scenario: '当产品或项目有新的业务诉求时，先放进需求池，再经过采纳后进入版本执行。',
    entry: '左侧导航栏 -> 需求池 -> 新建需求',
    steps: [
      '进入“需求池”页面。',
      '点击新建需求。',
      '填写需求标题、归属产品/项目、需求描述、优先级等信息。',
      '保存后，需求进入待评审或待采纳状态。',
      '评审通过后点击采纳，需求才会成为版本可纳入的候选项。',
    ],
    requiredFields: ['需求标题', '归属产品', '归属项目', '需求描述', '优先级', '提出人'],
    statusFlow: ['待评审', '已采纳', '已规划', '开发中', '测试中', '已发布', '已关闭', '已拒绝'],
    notes: [
      '只有已采纳需求才应该进入版本。',
      '需求解释为什么要做，版本和任务负责怎么执行。',
    ],
    images: [helpImage('requirement-pool', '需求池页面截图', '在需求池中新建、评审和采纳需求。')],
    relatedIds: ['version-requirement-include', 'version-create', 'dev-task-workflow'],
  },
  {
    id: 'version-requirement-include',
    title: '版本里如何从需求池纳入需求',
    category: '版本',
    keywords: [
      '版本需求',
      '需求纳入版本',
      '需求怎么纳入版本',
      '需求怎么纳入版本号',
      '纳入需求',
      '纳入版本',
      '纳入版本号',
      '加入版本',
      '关联需求',
      '需求关联版本',
      '需求进入版本',
      '从需求池纳入',
      '版本号里需求',
      '版本号里面的需求',
      '版本号需求',
      '需求怎么放进版本',
      '需求怎么加入版本号',
      '已采纳需求',
    ],
    scenario: '当需求池里的需求已采纳，并且本次版本要实现它时，把需求纳入版本。',
    entry: '左侧导航栏 -> 版本 -> 打开版本详情 -> 需求区域',
    steps: [
      '打开目标版本详情。',
      '进入需求区域或需求关联入口。',
      '从当前项目下已采纳需求中选择要纳入本版本的需求。',
      '保存关联关系。',
      '后续产品方案、AI 拆解、开发任务和测试用例都围绕这些版本需求展开。',
    ],
    requiredFields: ['目标版本', '至少一条已采纳需求'],
    statusFlow: ['需求：已采纳 -> 已规划 -> 开发中 -> 测试中 -> 已发布'],
    notes: [
      '候选需求来自当前项目下已采纳需求，不从全量需求池随意选择。',
      '如果找不到需求，先回需求池确认是否已采纳、是否属于当前项目。',
    ],
    images: [helpImage('version-requirement-include', '版本需求区域截图', '在版本详情中把已采纳需求纳入版本。')],
    relatedIds: ['requirement-pool', 'product-plan', 'ai-decompose'],
  },
  {
    id: 'research-plan',
    title: '调研计划如何创建和管理进度',
    category: '调研',
    keywords: [
      '调研',
      '调研计划',
      '创建调研',
      '新建调研',
      '调研方向',
      '调研进度',
      '方向进度',
      '调研完成',
      '计划日志',
      'VersionPlan',
    ],
    scenario: '当版本前期需要先做业务、技术或方案调研时，创建调研计划并记录方向进展。',
    entry: '版本详情 -> 计划区域 -> 新建调研计划',
    steps: [
      '打开版本详情。',
      '在计划区域选择新建调研计划。',
      '填写计划标题、负责人、计划起止时间。',
      '维护调研方向和每个方向的完成情况。',
      '所有调研方向完成并提交成果后，计划可完成。',
    ],
    requiredFields: ['计划标题', '负责人', '计划开始时间', '计划结束时间', '调研方向'],
    statusFlow: ['未开始', '进行中', '已完成'],
    notes: [
      '调研计划看的是方向完成度，不以需求覆盖作为完成条件。',
      '方向进度更新会进入计划日志和工作活动记录。',
    ],
    images: [helpImage('research-plan', '调研计划截图', '在版本计划中创建调研计划并更新方向进度。')],
    relatedIds: ['product-plan', 'activity-logs', 'version-create'],
  },
  {
    id: 'product-plan',
    title: '产品方案如何创建和提交成果',
    category: '产品方案',
    keywords: [
      '产品方案',
      '方案',
      '原型',
      '成果链接',
      '创建产品方案',
      '新建产品方案',
      '需求覆盖',
      '覆盖需求',
      '提交成果',
      '产品计划',
      '方案进度',
    ],
    scenario: '当版本需求需要先沉淀产品方案或原型成果时，创建产品方案计划。',
    entry: '版本详情 -> 计划区域 -> 新建产品方案',
    steps: [
      '打开版本详情。',
      '在计划区域创建产品方案计划。',
      '选择或确认本方案覆盖的版本需求。',
      '按需求记录未开始、部分完成、已完成的覆盖状态。',
      '提交成果链接，通常是原型链接或方案文档。',
      '覆盖需求全部完成并提交成果后，计划可完成。',
    ],
    requiredFields: ['计划标题', '负责人', '计划起止时间', '覆盖需求', '成果标题', '成果链接'],
    statusFlow: ['计划：未开始 -> 进行中 -> 已完成', '需求覆盖：未开始 -> 部分完成 -> 已完成'],
    notes: [
      'AI 拆解会优先使用已完成产品方案的成果链接作为原型输入。',
      '部分完成只记录进度，不满足成果提交门槛。',
    ],
    images: [helpImage('product-plan', '产品方案计划截图', '在产品方案计划中维护需求覆盖并提交成果。')],
    relatedIds: ['version-requirement-include', 'ai-decompose', 'activity-logs'],
  },
  {
    id: 'ai-decompose',
    title: 'AI 拆解开发任务和测试用例如何使用',
    category: 'AI 拆解',
    keywords: [
      'AI拆解',
      'ai拆解',
      'AI 拆解',
      '任务拆解',
      '开发任务拆解',
      '测试用例拆解',
      'AI生成任务',
      'AI生成用例',
      '采纳草稿',
      '对账报告',
      '原型拆解',
    ],
    scenario: '当版本已有已完成产品方案和已纳入需求时，可以让 AI 生成开发任务或测试用例草稿。',
    entry: '版本详情 -> 产品方案计划 -> AI 拆解开发任务 / AI 拆解测试用例',
    steps: [
      '确认版本中已纳入至少一条需求。',
      '确认至少一个产品方案计划已完成，并提交了成果链接。',
      '在产品方案区域点击 AI 拆解开发任务或 AI 拆解测试用例。',
      '查看对账报告，确认需求和原型是否匹配。',
      '选择要采纳的草稿。',
      '采纳后，草稿进入开发任务或测试用例列表，并带有 AI 草稿标记。',
    ],
    requiredFields: ['已完成产品方案成果链接', '版本已纳入需求', '版本成员'],
    statusFlow: ['AI 草稿 -> 用户采纳 -> 任务/用例列表 -> 用户编辑后转为普通记录'],
    notes: [
      'AI 只生成草稿，不代表负责人已确认排期。',
      'AI 估时写入 aiEstimateHours，执行估时仍需人工确认。',
      '第一阶段问翻小宝不会调用 AI；这里说明的是业务系统里的 AI 拆解功能。',
    ],
    images: [helpImage('ai-decompose', 'AI 拆解入口截图', '在产品方案计划中触发 AI 拆解。')],
    relatedIds: ['product-plan', 'dev-task-workflow', 'test-case-workflow'],
  },
  {
    id: 'ui-design-plan',
    title: 'UI 设计计划如何创建和管理进度',
    category: 'UI 设计',
    keywords: [
      'UI',
      'ui',
      'UI设计',
      'ui设计',
      '新建设计',
      '创建UI设计',
      'UI计划',
      '设计进度',
      '提交设计',
      '设计成果',
    ],
    scenario: '当版本需要设计稿、交互稿或视觉稿交付时，创建 UI 设计计划。',
    entry: '版本详情 -> 计划区域 -> 新建 UI 设计',
    steps: [
      '打开版本详情。',
      '在计划区域创建 UI 设计计划。',
      '填写负责人和计划起止时间。',
      '按需求维护设计覆盖进度。',
      '提交设计稿链接或成果说明。',
      '需求覆盖完成并提交成果后，计划可完成。',
    ],
    requiredFields: ['计划标题', '负责人', '计划起止时间', '覆盖需求', '设计成果链接'],
    statusFlow: ['计划：未开始 -> 进行中 -> 已完成', '需求覆盖：未开始 -> 部分完成 -> 已完成'],
    notes: [
      'UI 设计和产品方案一样，需要记录需求覆盖状态。',
      '提交成果后，日志会记录计划完成和成果提交行为。',
    ],
    images: [helpImage('ui-design-plan', 'UI 设计计划截图', '在版本计划中创建 UI 设计计划并提交成果。')],
    relatedIds: ['product-plan', 'activity-logs', 'dev-task-workflow'],
  },
  {
    id: 'dev-task-workflow',
    title: '开发任务如何新建、开发中和提测',
    category: '开发任务',
    keywords: [
      '开发任务',
      '任务',
      'DevTask',
      '新建开发任务',
      '创建开发任务',
      '任务怎么建',
      '领取任务',
      '填写计划',
      '开发中',
      '自测',
      '提测',
      '提交测试',
      '任务状态',
      '阻塞',
    ],
    scenario: '当版本需求已经明确，需要拆成具体研发工作项时，创建开发任务并推进状态。',
    entry: '版本详情 -> 开发任务 Tab -> 新建开发任务',
    steps: [
      '打开版本详情并进入开发任务 Tab。',
      '点击新建开发任务。',
      '选择关联需求，填写任务标题、类型、负责人、计划起止时间、估时等信息。',
      '负责人领取或确认计划后，将任务切换到开发中。',
      '开发完成后进入自测。',
      '自测通过且没有阻塞时，切换为已提测。',
    ],
    requiredFields: ['关联需求或原型批注', '任务标题', '任务类型', '负责人', '计划开始时间', '计划结束时间', '执行估时'],
    statusFlow: ['待开发', '开发中', '自测', '已提测'],
    notes: [
      '已提测是开发任务终态，后续测试失败不会回写开发任务状态。',
      '任务阻塞时不能提测，必须先解除阻塞。',
      'AI 草稿任务需要人工编辑或确认后再进入正式执行。',
    ],
    images: [helpImage('dev-task-workflow', '开发任务页面截图', '在开发任务 Tab 新建任务并推进到提测。')],
    relatedIds: ['ai-decompose', 'test-case-workflow', 'activity-logs'],
  },
  {
    id: 'test-case-workflow',
    title: '测试用例如何新建和执行',
    category: '测试用例',
    keywords: [
      '测试用例',
      '用例',
      'TestCase',
      '新建测试用例',
      '创建测试用例',
      '用例怎么建',
      '开始测试',
      '测试通过',
      '测试失败',
      '测试阻塞',
      '用例状态',
      '测试轮次',
    ],
    scenario: '当版本进入验收或测试阶段，需要按需求和测试点建立测试用例并执行。',
    entry: '版本详情 -> 测试用例 Tab -> 新建测试用例',
    steps: [
      '打开版本详情并进入测试用例 Tab。',
      '点击新建测试用例。',
      '选择关联需求、测试类型、负责人和计划测试时间。',
      '填写测试标题、步骤、预期结果。',
      '开始测试后，将用例切换为测试中。',
      '根据执行结果标记通过、失败或阻塞。',
    ],
    requiredFields: ['用例标题', '测试类型', '负责人', '计划测试时间', '计划结束时间', '测试步骤', '预期结果'],
    statusFlow: ['待测试', '测试中', '通过', '失败', '阻塞'],
    notes: [
      '测试用例主归属是版本，关联需求用于语义分组和覆盖说明。',
      '失败用例可以直接创建 Bug。',
      '只有最新轮次用例全部完成后，才能开启下一轮测试。',
    ],
    images: [helpImage('test-case-workflow', '测试用例页面截图', '在测试用例 Tab 新建和执行用例。')],
    relatedIds: ['bug-workflow', 'dev-task-workflow', 'ai-decompose'],
  },
  {
    id: 'bug-workflow',
    title: 'Bug 如何从失败用例创建和流转',
    category: 'Bug',
    keywords: [
      'Bug',
      'BUG',
      'bug',
      '缺陷',
      '问题',
      '新建Bug',
      '创建Bug',
      '提Bug',
      '怎么提bug',
      '测试失败提bug',
      '失败后提Bug',
      '失败后提 BUG',
      '测试用例失败后提Bug',
      '测试用例不通过提Bug',
      '不通过后提Bug',
      '从失败用例提Bug',
      '失败用例提 BUG',
      '修复Bug',
      '验证Bug',
      '关闭Bug',
      'Bug状态',
    ],
    scenario: '当测试用例执行失败后，从失败用例里提 Bug，并跟踪修复、验证和关闭。',
    entry: '版本详情 -> 测试用例 Tab -> 打开失败/不通过用例 -> 关联 Bug 区域点击提 BUG',
    steps: [
      '打开版本详情并进入测试用例 Tab。',
      '执行测试用例，并将问题用例标记为不通过/失败。',
      '打开该失败测试用例详情，在“关联 Bug”区域点击提 BUG。',
      '填写 Bug 标题、严重程度、复现步骤；版本和测试用例来源会自动带入。',
      '分配修复负责人和计划修复时间。',
      '负责人将 Bug 切换到修复中。',
      '修复完成后切换为待验证。',
      '测试验证通过后关闭；不通过时可退回修复。',
    ],
    requiredFields: ['Bug 标题', '严重程度', '所属版本', '复现步骤', '负责人', '计划修复时间'],
    statusFlow: ['待修复', '修复中', '待验证', '已关闭', '已拒绝'],
    notes: [
      '当前不能从 Bug Tab 直接新建 Bug；Bug Tab 用于查看、筛选和跟踪已由失败用例提出的 Bug。',
      'Bug 直接挂在版本上，测试用例只是来源追踪。',
      '关键 Bug 会影响小宝预警风险等级。',
      '关闭前应确认修复结果和验证记录。',
    ],
    images: [helpImage('bug-workflow', '失败用例提 Bug 截图', '在失败测试用例详情中点击提 BUG，并在 Bug Tab 跟踪修复。')],
    relatedIds: ['test-case-workflow', 'xiaobao-warning', 'activity-logs'],
  },
  {
    id: 'activity-logs',
    title: '日志记录会记录哪些行为',
    category: '日志记录',
    keywords: [
      '日志',
      '记录',
      '行为记录',
      '活动记录',
      '工作活动',
      '计划日志',
      '日报',
      '谁操作了',
      '记录哪些行为',
      '状态变更记录',
      'work activity',
      'activity',
    ],
    scenario: '当你需要追踪计划、任务、测试、Bug 的关键操作时，查看日志和活动记录。',
    entry: '版本详情计划抽屉、任务详情、工作台日报、小宝预警证据区域',
    steps: [
      '在计划详情里查看计划日志，了解需求覆盖、成果提交、AI 拆解等计划行为。',
      '在开发任务、测试用例、Bug 详情里查看对应实体的状态变更记录。',
      '在工作台日报里查看当前用户当天的交付、进展、创建和风险记录。',
      '在小宝预警里，系统会把日志和活动作为风险证据之一。',
    ],
    requiredFields: ['无需手工填写；系统在关键业务动作成功后自动记录。'],
    statusFlow: ['日志不单独流转，跟随业务动作追加。'],
    notes: [
      '计划日志记录计划内部行为，例如需求覆盖更新和成果提交。',
      '工作活动记录跨模块关键动作，例如任务开始、提测、Bug 修复、测试失败。',
      '手动工作日志仍可补充说明多日进行中的工作。',
    ],
    images: [helpImage('activity-logs', '日志记录页面截图', '在详情或工作台查看系统自动记录的行为。')],
    relatedIds: ['research-plan', 'product-plan', 'dev-task-workflow'],
  },
  {
    id: 'xiaobao-warning',
    title: '小宝预警和问翻小宝有什么区别',
    category: '小宝预警',
    keywords: [
      '小宝预警',
      '预警',
      '风险',
      '红点',
      '发布风险',
      '能不能发版',
      '问翻小宝和小宝预警',
    ],
    scenario: '当你想判断版本能不能按期发布时，看小宝预警；当你不知道系统怎么用时，问问翻小宝。',
    entry: '左侧导航栏 -> 小宝预警',
    steps: [
      '进入小宝预警页面。',
      '查看有风险的未完成版本。',
      '打开预警详情，查看风险分、预计发版日、风险原因和建议动作。',
    ],
    requiredFields: ['无需手工填写；风险来自版本、任务、测试、Bug、日报和活动数据。'],
    statusFlow: ['正常', '关注', '有风险', '大概率延期', '阻塞'],
    notes: [
      '小宝预警用于版本发布风险，不回答系统怎么使用。',
      '问翻小宝第一阶段只回答帮助中心内容，不分析版本风险。',
    ],
    images: [helpImage('xiaobao-warning', '小宝预警页面截图', '小宝预警用于查看版本发布风险。')],
    relatedIds: ['version-create', 'activity-logs', 'bug-workflow'],
  },
];
