import { AgentType } from './agentAttributes';

export interface QuickSelectOption {
  label: string;
  value: string;
}

export interface InspectorAction {
  label: string;
  /** Skill folder name (e.g. "ui-config-update"). null if no matching skill. */
  skill: string | null;
  /** Prompt template. Use {resource} and {field} as placeholders. */
  promptTemplate?: string;
  /**
   * Optional text prepended BEFORE the user's input (for requiresInput actions).
   * e.g. "修改为：" → generates "修改为：\n{userInput}"
   * Defaults to "修改为：" if not set and no promptSuffix is present.
   */
  promptPrefix?: string;
  /**
   * Optional text appended AFTER the user's input (for requiresInput actions).
   * Use this to add constraint notes or guidelines that should follow the user's request,
   * e.g. "注意：BulkActions 是公共组件，不可直接修改其源码。"
   */
  promptSuffix?: string;
  /** If true, show a free-text input instead of pre-filled prompt (for "其他" catch-all) */
  freeInput?: boolean;
  /**
   * If true, show a modal asking the user to fill in supplementary details
   * before sending the prompt. The user's input is appended to promptTemplate.
   */
  requiresInput?: boolean;
  /** Placeholder text shown in the supplementary-input modal */
  inputPlaceholder?: string;
  /**
   * If true, show a confirmation dialog before sending the prompt.
   * Use this for destructive or hard-to-reverse actions.
   */
  requiresConfirm?: boolean;
  /** Description shown inside the confirmation dialog */
  confirmDescription?: string;
  /**
   * If set, renders a dynamic sub-menu listing fields not yet shown on the page.
   * User picks a field, then sees a confirmation dialog — no textarea needed.
   * 'add-after' / 'add-before' controls the generated prompt wording.
   */
  fieldSubMenu?: 'add-after' | 'add-before';
  /** Sub-menu children — renders as a nested Ant Design sub-menu */
  children?: InspectorAction[];

  // ── 快捷操作类型（不走 agent）──────────────────────────────────────────────

  /** 快捷输入框：弹出输入框，用户填入新值，前端直接替换 JSX code 中的 prop */
  quickInput?: boolean;
  quickInputPlaceholder?: string;

  /** 快捷下拉：弹出 Select，用户选择后前端直接替换 prop 值 */
  quickSelect?: boolean;
  quickSelectOptions?: QuickSelectOption[];

  /**
   * 快捷开关：点击后直接切换 boolean prop，无需弹框。
   * labelWhenActive: 当 prop 为 true 时显示的 label。
   * labelWhenInactive: 当 prop 为 false 时显示的 label。
   * defaultValue: prop 缺省时认为的初始值。
   */
  quickToggle?: boolean;
  labelWhenActive?: string;
  labelWhenInactive?: string;
  defaultValue?: boolean;

  /** 弹出自由对话框：走 agent 自由对话（skill 为 null） */
  openDialog?: boolean;
  dialogPlaceholder?: string;

  /** 所有快捷操作共用：要操作的 prop 名称 */
  propName?: string;

  /**
   * If set, this item triggers a named action callback in SkillMenu
   * instead of sending a prompt to the agent.
   */
  actionKey?: 'editData' | 'deleteData' | 'addData' | 'addPage';
}

/**
 * SkillMenu 快捷操作配置。
 * 每个 key 对应一类页面，SkillMenu 根据当前页面类型按需读取。
 *
 * 现有 key：
 *   page      — "本页面" 固定区块（数据管理页可用）
 *   project   — "本项目" 固定区块（始终显示）
 *   formPage  — 表单页专属（pageType === 'create' | 'edit'）
 *
 * 扩展示例（未来按需添加）：
 *   listPage  — 列表页专属
 *   showPage  — 详情页专属
 */
export const SKILL_MENU_CONFIG: Record<string, InspectorAction[]> = {
  /** "本项目" 固定区块，始终显示 */
  project: [
    {
      label: '添加新的数据表',
      skill: null,
      actionKey: 'addData',
    },
    {
      label: '添加新页面',
      skill: null,
      actionKey: 'addPage',
    },
  ],

  /** "本页面" 固定区块，所有gadmin2的CRUD数据管理页可用 */
  page: [
    {
      label: '修改数据表',
      skill: null,
      actionKey: 'editData',
    },
    {
      label: '删除数据表及页面',
      skill: null,
      actionKey: 'deleteData',
    },
    {
      label: '管理定时任务',
      skill: 'cron-job-management',
      requiresInput: true,
      inputPlaceholder:
        '请描述定时任务需求，例如：\n- 新增每天凌晨 2 点执行的数据同步任务（cron: 0 2 * * *）\n- 修改 sync-data 任务的执行频率为每 30 分钟一次\n- 取消/删除 cleanup-expired-tokens 任务',
      promptSuffix:
        '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
    },
  ],

  /** 表单页（create / edit）专属操作 */
  formPage: [
    {
      label: '将表单改为多步骤向导',
      skill: 'form-wizard-steps',
      requiresInput: true,
      inputPlaceholder:
        '请描述步骤划分，例如：\n第一步：基本信息（名称、类型）\n第二步：配置参数\n第三步：确认提交',
      promptSuffix:
        '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
    },
    {
      label: "将创建页改为'只编辑不新增'",
      skill: 'form-singleton-form',
      requiresConfirm: true,
      confirmDescription:
        '将把当前创建页改为单例表单模式：只保留编辑功能，不允许新增记录。',
    },
    {
      label: '保存成功后弹提示/跳转',
      skill: 'form-post-save-alert',
      requiresInput: true,
      inputPlaceholder:
        '请描述保存后的行为，例如：\n- 显示"保存成功"提示后跳转回列表页\n- 弹窗显示提交编号，关闭后留在当前页',
      promptSuffix:
        '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
    },
    {
      label: '在表单顶部添加说明横幅',
      skill: 'form-help-alert',
      requiresInput: true,
      inputPlaceholder:
        '请输入横幅说明文字，例如：\n此表单提交后不可修改，请仔细核对后再提交。',
      promptSuffix:
        '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
    },
    {
      label: '在表单底部添加文档链接',
      skill: 'form-external-help-links',
      requiresInput: true,
      inputPlaceholder:
        '请提供链接文字和 URL，例如：\n链接文字"查看配置文档"，URL: https://docs.example.com\n链接文字"权限申请指引"，URL: https://wiki.example.com/permissions',
      promptSuffix:
        '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
    },
    {
      label: '表单根据当前业务隔离数据',
      skill: 'form-business-isolation',
      requiresConfirm: true,
      confirmDescription:
        '将为当前表单添加业务隔离逻辑：新建/编辑时自动注入当前业务标识（studio_id）。注意：列表页的数据过滤需另行配置 permanentFilter（参考 list-search-filter skill）。',
    },
  ],

  // listPage: [...],  // 未来扩展
  // showPage: [...],  // 未来扩展
};

export interface InspectedElementInfo {
  type: AgentType;
  field?: string;
  resource: string;
  file?: string;
  meta?: Record<string, any>;
  /** Click position for menu placement */
  x: number;
  y: number;
}

function col(resource: string, field: string): string {
  return `${resource} 列表中的 "${field}" 列`;
}

function formF(resource: string, field: string): string {
  return `${resource} 表单中的 "${field}" 字段`;
}

function showF(resource: string, field: string): string {
  return `${resource} 详情页的 "${field}" 字段`;
}

export function getInspectorActions(
  info: InspectedElementInfo,
): InspectorAction[] {
  const { type, resource, field } = info;
  const r = resource;
  const f = field || '';

  switch (type) {
    case 'list-column':
      return [
        {
          label: '不显示（仅页面）',
          skill: 'ui-config-update',
          promptTemplate: `隐藏 ${col(r, f)}（仅页面不显示）`,
          requiresConfirm: true,
          confirmDescription: `将从 ${r} 列表页面中隐藏 "${f}" 列。数据库字段不受影响，可随时恢复显示。`,
        },
        {
          label: '修改字段值展示样式',
          skill: 'list-column-render',
          promptTemplate: `自定义 ${col(r, f)} 的渲染样式`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述样式要求，例如：用颜色区分状态，ACTIVE 显示绿色，INACTIVE 显示红色',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改表头描述（label）',
          skill: 'page-i18n',
          promptTemplate: `修改 ${col(r, f)} 的显示名称（通过 i18n 翻译文件）`,
          requiresInput: true,
          promptPrefix: '修改为：',
          inputPlaceholder:
            '请分别提供中文和英文名称，例如：\n中文：审核状态\n英文：Review Status\n（翻译 key：resources.{resourceName}.fields.{fieldName}）',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '固定列',
          skill: 'list-column-fixed',
          promptTemplate: `将 ${col(r, f)} `,
          promptPrefix: '固定到：',
          requiresInput: true,
          inputPlaceholder: '请指定固定方向：左 / 右',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '支持行内编辑',
          skill: 'list-column-inline-edit',
          promptTemplate: `为 ${col(r, f)} 启用行内编辑`,
          requiresConfirm: true,
          confirmDescription: `将为 ${r} 列表的 "${f}" 列开启行内编辑，用户可直接在表格中修改该字段的值。`,
        },
        {
          label: '添加表头排序',
          skill: 'ui-config-update',
          promptTemplate: `为 ${col(r, f)} 添加排序`,
          requiresConfirm: true,
          confirmDescription: `将为 ${r} 列表的 "${f}" 列添加点击排序功能。`,
        },
        {
          label: '移除表头排序',
          skill: 'ui-config-update',
          promptTemplate: `移除 ${col(r, f)} 的排序`,
          requiresConfirm: true,
          confirmDescription: `将移除 ${r} 列表 "${f}" 列的排序功能。`,
        },
        {
          label: '添加表头搜索',
          skill: 'ui-config-update',
          promptTemplate: `为 ${col(r, f)} 添加搜索过滤`,
          requiresConfirm: true,
          confirmDescription: `将为 ${r} 列表的 "${f}" 列添加表头搜索过滤。`,
        },
        {
          label: '移除表头搜索',
          skill: 'ui-config-update',
          promptTemplate: `移除 ${col(r, f)} 的搜索过滤`,
          requiresConfirm: true,
          confirmDescription: `将移除 ${r} 列表 "${f}" 列的表头搜索过滤。`,
        },
        {
          label: '在其后面添加展示字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${r} ${col(r, f)} 后面添加展示字段`,
          fieldSubMenu: 'add-after',
        },
        {
          label: '在其前面添加展示字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${r} ${col(r, f)} 前面添加展示字段`,
          fieldSubMenu: 'add-before',
        },
        {
          label: '在列中添加关联表的字段',
          skill: 'list-extend-prisma-select',
          promptTemplate: `为 ${col(r, f)} 添加关联表的字段展示`,
          requiresInput: true,
          promptPrefix: '要添加的字段：',
          inputPlaceholder:
            '请描述要添加的关联字段，例如：author.name 作者姓名',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 列表中的 "${f}" 列进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'form-field':
      return [
        {
          label: '不显示',
          skill: 'ui-config-update',
          promptTemplate: `隐藏 ${formF(r, f)}（仅页面不显示）`,
          requiresConfirm: true,
          confirmDescription: `将从 ${r} 表单中隐藏 "${f}" 字段。数据库字段不受影响，可随时恢复显示。`,
        },
        {
          label: '彻底删除字段',
          skill: 'prisma-schema-update',
          promptTemplate: `彻底删除 ${formF(r, f)}：先用 prisma-schema-update 从数据库删除字段，再用 ui-config-update 从页面配置中移除该字段`,
          requiresConfirm: true,
          confirmDescription: `将从数据库和表单页面中彻底删除 "${f}" 字段。此操作不可逆，字段的历史数据也将全部清除。`,
        },
        {
          label: '修改描述（label）',
          skill: 'page-i18n',
          promptTemplate: `修改 ${formF(r, f)} 的显示名称（通过 i18n 翻译文件）`,
          requiresInput: true,
          promptPrefix: '修改为：',
          inputPlaceholder:
            '请分别提供中文和英文名称，例如：\n中文：游戏名称\n英文：Game Name\n（翻译 key：resources.{resourceName}.fields.{fieldName}）',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '字段旁添加帮助提示（含链接）',
          skill: 'form-field-tooltip',
          promptTemplate: `为 ${formF(r, f)} 添加 Tooltip 帮助提示（可包含链接）`,
          promptPrefix: '要添加的提示内容：',
          requiresInput: true,
          inputPlaceholder:
            '请描述提示内容，例如：\n提示文字"详见配置文档"，链接 https://docs.example.com\n或纯文字：此字段用于关联上游系统的唯一标识',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '字段联动（显/隐）',
          skill: 'form-field-dependencies',
          promptTemplate: `为 ${formF(r, f)} 添加联动依赖（显/隐依赖其他字段）`,
          promptPrefix: '要添加的联动条件：',
          requiresInput: true,
          inputPlaceholder:
            '请描述联动条件，例如：当"类型"字段值为"高级"时才显示此字段',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义校验逻辑',
          skill: 'form-custom-validator',
          promptTemplate: `为 ${formF(r, f)} 添加自定义校验规则`,
          promptPrefix: '要添加的校验规则：',
          requiresInput: true,
          inputPlaceholder: '请描述校验规则，例如：必须是正整数且不超过 100',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '改为级联选择器',
          skill: 'form-cascader-component',
          promptTemplate: `将 ${formF(r, f)} 替换为级联选择器`,
          promptPrefix: '级联层级关系和数据来源：',
          requiresInput: true,
          inputPlaceholder:
            '请描述级联层级和数据来源，例如：省 → 市 → 区，数据来自 /api/regions',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '改为自动补全输入方式',
          skill: 'prisma-schema-update',
          promptTemplate: `将 ${formF(r, f)} 改为 @FormItem(AutoComplete)，建议值从后端已有数据动态加载`,
          requiresConfirm: true,
          confirmDescription: `将把 ${formF(r, f)} 的表单控件改为自动补全输入框（AutoComplete）。用户可以自由输入任意新值，同时系统会自动将该字段的历史值作为输入建议。`,
        },
        {
          label: '修改字段类型',
          skill: 'prisma-schema-update',
          promptTemplate: `修改 ${formF(r, f)} 的表单控件类型（@FormItem 注解）`,
          promptPrefix: '修改为：',
          requiresInput: true,
          inputPlaceholder:
            '请说明要改为什么控件类型，例如：改为下拉选择（Select DRAFT|PUBLISHED）、改为开关（Boolean）、改为多行文本（Text）、改为数字输入框（Number）',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '在其后面添加输入字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${formF(r, f)} 后面添加输入字段`,
          fieldSubMenu: 'add-after',
        },
        {
          label: '在其前面添加输入字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${formF(r, f)} 前面添加输入字段`,
          fieldSubMenu: 'add-before',
        },
        {
          label: '字段选项从关联接口动态加载',
          skill: 'form-load-related-data',
          promptTemplate: `为 ${formF(r, f)} 的选项从关联接口动态加载`,
          promptPrefix: '数据来源(接口)：',
          requiresInput: true,
          inputPlaceholder:
            '请描述数据来源接口，例如：从 /api/games 加载游戏列表作为下拉选项',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '表单提交前转换字段数据',
          skill: 'form-data-transform',
          promptTemplate: `为 ${formF(r, f)} 添加数据转换逻辑（表单提交前）`,
          promptPrefix: '具体转换规则：',
          requiresInput: true,
          inputPlaceholder:
            '请描述转换规则，例如：提交前将数组转为逗号分隔字符串，回填时再拆回数组',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 表单中的 "${f}" 字段进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'show-field':
      return [
        {
          label: '不显示',
          skill: 'ui-config-update',
          promptTemplate: `隐藏 ${showF(r, f)}`,
          requiresConfirm: true,
          confirmDescription: `将从 ${r} 详情页中隐藏 "${f}" 字段。数据库字段不受影响，可随时恢复显示。`,
        },
        {
          label: '修改字段值展示样式',
          skill: 'show-field-render',
          promptTemplate: `自定义 ${showF(r, f)} 的显示方式`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述样式要求，例如：将 JSON 格式化展示，或用颜色标签渲染状态',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改描述（label）',
          skill: 'page-i18n',
          promptTemplate: `修改 ${showF(r, f)} 的标签名称（通过 i18n 翻译文件）`,
          promptPrefix: '修改为：',
          requiresInput: true,
          inputPlaceholder:
            '请分别提供中文和英文名称，例如：\n中文：审核状态\n英文：Review Status\n（翻译 key：resources.{resourceName}.fields.{fieldName}）',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '在其后面添加展示字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${r} "${showF(r, f)}" 后面添加展示字段`,
          fieldSubMenu: 'add-after',
        },
        {
          label: '在其前面添加展示字段',
          skill: 'ui-config-update',
          promptTemplate: `在 ${r} "${showF(r, f)}" 前面添加展示字段`,
          fieldSubMenu: 'add-before',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 详情页的 "${f}" 字段进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'list-search-bar':
      return [
        {
          label: '增加 模糊匹配 过滤',
          skill: 'list-search-filter',
          promptTemplate: `为 ${r} 搜索栏添加模糊匹配过滤（通过修改ui配置）`,
          promptPrefix: '要添加的字段：',
          requiresInput: true,
          inputPlaceholder: '请填写要添加模糊搜索的字段名，例如：name、title',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '增加 下拉 过滤',
          skill: 'list-search-filter',
          promptTemplate: `为 ${r} 搜索栏添加 Select 下拉过滤`,
          promptPrefix: '要添加的字段：',
          requiresInput: true,
          inputPlaceholder:
            '请填写字段名，例如：字段 status；或字段 gameId，选项来自关联表 game 的 name 字段',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '增加 checkbox 过滤',
          skill: 'list-search-filter',
          promptTemplate: `为 ${r} 搜索栏添加 Checkbox 多选过滤`,
          promptPrefix: '要添加的字段：',
          requiresInput: true,
          inputPlaceholder: '请填写字段名及选项，例如：字段 category',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '增加 radio 过滤',
          skill: 'list-search-filter',
          promptTemplate: `为 ${r} 搜索栏添加 Radio 单选过滤`,
          promptPrefix: '要添加的字段：',
          requiresInput: true,
          inputPlaceholder:
            '请填写字段名及选项，例如：字段 type，选项：全部|在线|离线',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '添加固定过滤（不可清除）',
          skill: 'list-search-filter',
          promptTemplate: `为 ${r} 列表页添加不可被用户清除的固定过滤条件（permanentFilter）`,
          promptPrefix: '要添加的固定过滤条件：',
          requiresInput: true,
          inputPlaceholder:
            '请描述固定过滤条件，例如：始终只显示 status=ACTIVE 的数据，或按当前用户 ID 过滤',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '移除 过滤字段',
          skill: 'list-search-filter',
          promptTemplate: `从 ${r} 搜索栏删除过滤字段`,
          promptPrefix: '要删除的过滤字段：',
          requiresInput: true,
          inputPlaceholder: '请填写要删除的过滤字段名',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改描述（label）',
          skill: 'page-i18n',
          promptTemplate: `修改 ${r} 搜索栏某个过滤字段的显示名称（通过 i18n 翻译文件）`,
          promptPrefix: '修改为：',
          requiresInput: true,
          inputPlaceholder:
            '请填写字段名，并分别提供中文和英文名称，例如：\n字段：status\n中文：审核状态\n英文：Review Status\n（翻译 key：resources.{resourceName}.fields.{fieldName}）',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 列表页的搜索栏进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'list-header':
      return [
        {
          label: '新建按钮',
          skill: null,
          children: [
            {
              label: '按条件显示',
              skill: 'list-createbtn-customization',
              promptTemplate: `为 ${r} 列表页工具栏新建按钮添加条件显示逻辑`,
              promptPrefix: '显示条件：',
              requiresInput: true,
              inputPlaceholder:
                '请描述显示条件，例如：仅角色为 GPU_ADMIN 时才显示新建按钮',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 列表页工具栏新建按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder:
                '请分别提供中文和英文，例如：\n中文：新建游戏\n英文：Create Game',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'list-createbtn-customization',
              promptTemplate: `从 ${r} 列表页工具栏移除新建按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页工具栏中移除新建按钮，用户将无法从该页面新建记录。`,
            },
          ],
        },
        {
          label: '导入按钮',
          skill: null,
          children: [
            {
              label: '按条件显示',
              skill: 'list-import-customization',
              promptTemplate: `为 ${r} 列表页工具栏添加按条件显示的 导入按钮`,
              promptPrefix: '显示条件：',
              requiresInput: true,
              inputPlaceholder: '请描述显示条件',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 列表页工具栏导入按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder: '请分别提供中文和英文',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'list-import-customization',
              promptTemplate: `从 ${r} 列表页工具栏移除 CSV 导入`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页工具栏中移除 CSV 导入按钮。`,
            },
            {
              label: '自定义导入行为',
              skill: 'list-import-customization',
              requiresInput: true,
              promptTemplate: `修改 ${r} 列表页工具栏的导入行为`,
            },
          ],
        },
        {
          label: '导出按钮',
          skill: null,
          children: [
            {
              label: '按条件显示',
              skill: 'list-export-customization',
              promptTemplate: `为 ${r} 列表页工具栏添加按条件显示的 导出按钮`,
              promptPrefix: '显示条件：',
              requiresInput: true,
              inputPlaceholder: '请描述显示条件',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 列表页工具栏导出按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder: '请分别提供中文和英文',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'list-export-customization',
              promptTemplate: `从 ${r} 列表页工具栏移除 导出按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页工具栏中移除 导出按钮。`,
            },
            {
              label: '自定义导出行为',
              requiresInput: true,
              skill: 'list-export-customization',
              promptTemplate: `修改 ${r} 列表页工具栏的导出行为`,
            },
          ],
        },
        {
          label: '刷新按钮',
          skill: null,
          children: [
            {
              label: '添加',
              skill: 'list-refresh-customization',
              promptTemplate: `为 ${r} 列表页工具栏添加刷新按钮`,
              requiresConfirm: true,
              confirmDescription: `将在 ${r} 列表页工具栏中添加刷新按钮。`,
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 列表页工具栏刷新按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder: '请分别提供中文和英文',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'list-refresh-customization',
              promptTemplate: `从 ${r} 列表页工具栏移除刷新按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页工具栏中移除刷新按钮。`,
            },
          ],
        },
        {
          label: '全只读模式',
          skill: 'list-readonly-mode',
          promptTemplate: `将 ${r} 列表页设置为全只读模式（移除所有写操作）`,
          requiresConfirm: true,
          confirmDescription: `将 ${r} 列表页设为只读模式，移除新建、编辑、删除等所有写操作入口。`,
        },
        {
          label: '添加列显示/隐藏控制面板',
          skill: 'list-column-visibility',
          promptTemplate: `为 ${r} 列表页工具栏添加列显示/隐藏控制面板`,
          requiresConfirm: true,
          confirmDescription: `将在 ${r} 列表页工具栏中添加列显示/隐藏控制面板，用户可自定义显示哪些列。`,
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 列表页的工具栏区域（ListPageHeader 组件）进行修改`,
          promptPrefix: '具体要求：',
          promptSuffix: `注意：ListPageHeader 是公共组件，不可直接修改其源码。\n请优先通过调整列表页中 ListPageHeader 的 render props 来实现；\n如果 render props 无法满足需求，再在列表页内创建局部组件来替代。\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动`,
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
        },
      ];

    case 'list-row-actions':
      return [
        {
          label: '添加操作按钮',
          skill: 'list-custom-row-actions',
          promptTemplate: `为 ${r} 列表页行操作添加自定义按钮（通过CHANGE_STATUS配置 或者 自定义行操作）`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述按钮的名称、修改的状态字段和变更目标的值，例如：添加"发布"按钮，将 status 字段从 PENDING 改为 APPROVED' +
            '\n或者\n' +
            '请描述按钮名称和要调用的接口，例如：添加"审核"按钮，点击后调用 POST /api/approve/:id',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '添加 跳转至外部链接 按钮',
          skill: 'list-row-action-external',
          promptTemplate: `为 ${r} 列表页行操作添加跳转链接按钮`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述按钮名称和跳转目标，例如：添加"查看报表"按钮，跳转到 /reports/:id',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '添加 跳转至站内页面 按钮',
          skill: 'list-row-action-link',
          promptTemplate: `为 ${r} 列表页行操作添加站内页面跳转按钮`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述按钮名称和目标页面，例如：添加"查看详情"按钮，跳转到 /orders/:id/detail',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '按条件显示 编辑 按钮 ',
          skill: 'ui-config-update',
          promptTemplate: `为 ${r} 列表页的 编辑 按钮添加条件显示逻辑（EDIT）`,
          promptPrefix: '显示条件：',
          requiresInput: true,
          inputPlaceholder:
            '请描述显示条件，例如：当 status 为 PENDING 时显示 编辑 按钮',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 列表页的行操作区域（RowActions 组件）进行修改`,
          promptPrefix: '具体要求：',
          promptSuffix: `注意：RowActions 是公共组件，不可直接修改其源码。\n请优先通过调整列表页中 RowActions 的 render props 来实现；\n如果 render props 无法满足需求，再在列表页内创建局部组件来替代。\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动`,
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
        },
      ];

    case 'list-bulk-actions':
      return [
        {
          label: '"批量删除"功能',
          skill: null,
          children: [
            {
              label: '添加',
              skill: 'list-bulk-actions-batch-delete-promise',
              promptTemplate: `为 ${r} 列表页添加批量删除`,
              requiresConfirm: true,
              confirmDescription: `将为 ${r} 列表页添加批量删除功能，用户可勾选多行后一键删除。`,
            },
            {
              label: '移除',
              skill: 'list-bulk-actions-batch-delete-promise',
              promptTemplate: `从 ${r} 列表页移除批量删除`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页移除批量删除功能。`,
            },
          ],
        },
        {
          label: '"批量编辑"功能',
          skill: null,
          children: [
            {
              label: '添加（固定值，如状态）',
              skill: 'list-bulk-actions-batch-modify-modal',
              promptTemplate: `为 ${r} 列表页添加批量编辑弹窗（固定值）`,
              promptPrefix: '具体要求：',
              requiresInput: true,
              inputPlaceholder:
                '请描述要批量修改的字段和固定值，例如：将 status 批量设为 PUBLISHED',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '添加（用户输入）',
              skill: 'list-bulk-actions-batch-modify-modal',
              promptTemplate: `为 ${r} 列表页添加批量编辑弹窗（用户输入）`,
              promptPrefix: '具体要求：',
              requiresInput: true,
              inputPlaceholder:
                '请描述要批量编辑的字段，例如：让用户输入 remark 后批量更新',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'list-bulk-actions-batch-modify-modal',
              promptTemplate: `从 ${r} 列表页移除批量编辑弹窗`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页移除批量编辑弹窗。`,
            },
          ],
        },
        {
          label: '"批量导出"功能',
          skill: null,
          children: [
            {
              label: '添加',
              skill: 'ui-config-update',
              promptTemplate: `开启 ${r} 列表页的批量导出功能`,
              requiresConfirm: true,
              confirmDescription: `将开启 ${r} 列表页的批量导出功能，用户可勾选多行后执行批量导出。`,
            },
            {
              label: '移除',
              skill: 'ui-config-update',
              promptTemplate: `从 ${r} 列表页移除批量导出`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 列表页移除批量导出功能。`,
            },
          ],
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 列表页的批量操作区域（BulkActions 组件）进行修改`,
          promptPrefix: '具体要求：',
          promptSuffix: `注意：BulkActions 是公共组件，不可直接修改其源码。\n请优先通过调整列表页中 BulkActions 的 render props（如 renderDeleteButton、extraActions 等）来实现；\n如果 render props 无法满足需求，再在列表页内创建局部组件来替代。\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动`,
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
        },
      ];

    case 'app-title':
      return [
        {
          label: '修改标题文字',
          skill: 'header-customization',
          promptTemplate: `修改网站标题文字`,
          requiresInput: true,
          promptPrefix: '修改为：',
          inputPlaceholder:
            '请描述修改内容，例如：\n- 改为"xxx 管理后台"\n- 隐藏标题只保留 Logo',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改Logo',
          skill: 'header-customization',
          promptTemplate: `修改网站 Logo`,
          requiresInput: true,
          promptPrefix: '具体要求：',
          inputPlaceholder:
            '请描述修改内容，例如：\n- 替换为图片 Logo（提供图片路径或 URL）\n- 修改 Logo 颜色\n- 隐藏 Logo',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对页面标题和 Logo 区域进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'app-header':
      return [
        {
          label: '修改业务（游戏）选择器',
          skill: 'header-customization',
          promptTemplate: `修改顶部导航的业务（游戏）选择器`,
          requiresInput: true,
          promptPrefix: '具体要求：',
          inputPlaceholder:
            '请描述修改内容，例如：\n- 隐藏选择器\n- 修改宽度为 200px\n- 默认选中第一项',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改语言切换',
          skill: 'header-customization',
          promptTemplate: `修改顶部导航的语言切换`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述修改内容，例如：\n- 隐藏语言切换\n- 只保留中文，移除多语言切换',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改用户信息（头像/用户名）',
          skill: 'header-customization',
          promptTemplate: `修改顶部导航的用户信息区`,
          requiresInput: true,
          promptPrefix: '具体要求：',
          inputPlaceholder:
            '请描述修改内容，例如：\n- 隐藏用户名，只显示头像\n- 隐藏头像和用户名\n- 点击用户名跳转到个人主页',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '修改整体样式',
          skill: 'header-customization',
          promptTemplate: `修改顶部导航的整体样式`,
          requiresInput: true,
          promptPrefix: '具体要求：',
          inputPlaceholder:
            '请描述修改内容，例如：\n- 背景色改为深色 #001529\n- 高度改为 48px\n- 左侧添加系统标题文字',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对顶部导航栏（App Header 组件）进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'show-header':
      return [
        {
          label: '编辑按钮',
          skill: null,
          children: [
            {
              label: '显示（按条件）',
              skill: 'show-readonly-header',
              promptTemplate: `为 ${r} 详情页编辑按钮添加条件显示逻辑`,
              requiresInput: true,
              promptPrefix: '显示条件：',
              inputPlaceholder:
                '请描述显示条件，例如：仅角色为 ADMIN 时才显示编辑按钮',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 详情页编辑按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder:
                '请分别提供中文和英文，例如：\n中文：修改\n英文：Edit',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'show-readonly-header',
              promptTemplate: `从 ${r} 详情页移除编辑按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 详情页移除编辑按钮，用户将无法从详情页跳转到编辑页。`,
            },
          ],
        },
        {
          label: '复制按钮',
          skill: null,
          children: [
            {
              label: '添加',
              skill: 'show-readonly-header',
              promptTemplate: `为 ${r} 详情页添加复制按钮`,
              requiresConfirm: true,
              confirmDescription: `将为 ${r} 详情页添加复制按钮，用户可一键复制当前记录。`,
            },
            {
              label: '显示（按条件）',
              skill: 'show-readonly-header',
              promptTemplate: `为 ${r} 详情页复制按钮添加条件显示逻辑`,
              promptPrefix: '显示条件：',
              requiresInput: true,
              inputPlaceholder: '请描述显示条件',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 详情页复制按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder:
                '请分别提供中文和英文，例如：\n中文：复制\n英文：Clone',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'show-readonly-header',
              promptTemplate: `从 ${r} 详情页移除复制按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 详情页移除复制按钮。`,
            },
          ],
        },
        {
          label: '删除按钮',
          skill: null,
          children: [
            {
              label: '显示（按条件）',
              skill: 'show-readonly-header',
              promptTemplate: `为 ${r} 详情页删除按钮添加条件显示的逻辑`,
              promptPrefix: '具体逻辑为：',
              requiresInput: true,
              inputPlaceholder:
                '请描述显示条件，例如：当 status 为 PUBLISHED 时隐藏删除按钮',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 详情页删除按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder:
                '请分别提供中文和英文，例如：\n中文：删除\n英文：Delete',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'show-readonly-header',
              promptTemplate: `从 ${r} 详情页移除删除按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 详情页移除删除按钮。`,
            },
          ],
        },
        {
          label: '刷新按钮',
          skill: null,
          children: [
            {
              label: '添加',
              skill: 'show-readonly-header',
              promptTemplate: `为 ${r} 详情页添加刷新按钮`,
              requiresConfirm: true,
              confirmDescription: `将为 ${r} 详情页添加刷新按钮。`,
            },
            {
              label: '修改描述（label）',
              skill: 'page-i18n',
              promptTemplate: `修改 ${r} 详情页刷新按钮的显示名称（通过 i18n 翻译文件）`,
              promptPrefix: '修改为：',
              requiresInput: true,
              inputPlaceholder:
                '请分别提供中文和英文，例如：\n中文：刷新\n英文：Refresh',
              promptSuffix:
                '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
            },
            {
              label: '移除',
              skill: 'show-readonly-header',
              promptTemplate: `从 ${r} 详情页移除刷新按钮`,
              requiresConfirm: true,
              confirmDescription: `将从 ${r} 详情页移除刷新按钮。`,
            },
          ],
        },
        {
          label: '添加 自定义操作按钮（可调接口）',
          skill: 'show-readonly-header',
          promptTemplate: `为 ${r} 详情页工具栏添加自定义操作按钮`,
          promptPrefix: '具体要求：',
          requiresInput: true,
          inputPlaceholder:
            '请描述按钮名称和要调用的接口，例如：添加"审核通过"按钮，点击后调用 POST /api/approve/:id',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
        {
          label: '全只读模式（移除所有写操作）',
          skill: 'show-readonly-header',
          promptTemplate: `将 ${r} 详情页设为只读模式，移除编辑、复制、删除按钮`,
          requiresConfirm: true,
          confirmDescription: `将 ${r} 详情页设为只读模式，移除编辑、复制、删除按钮，用户只能查看不能修改。`,
        },
        {
          label: '自定义',
          skill: null,
          requiresInput: true,
          promptTemplate: `对 ${r} 详情页的操作工具栏（show header 区域）进行修改`,
          promptPrefix: '具体要求：',
          inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
          promptSuffix:
            '\n你先理解下这个需求，然后找我澄清需求（非技术方案），我确认后再行动',
        },
      ];

    case 'canvas-component': {
      // Canvas 组件的操作已迁移到右键菜单，检查元素面板不再显示
      return [];
    }

    default:
      return [];
  }
}
