import type { AssetTemplate, CharacterSpec, PackKind, TextTemplate } from './types';

export const FILENAME_SCHEMA = '{sessionId}_{characterSlug}_{pack}_{view}_{version}.{ext}';
export const TEMPLATE_FREEZE_VERSION = 'toy-pack-templates-v01';

export const PACK_LABELS: Record<PackKind, string> = {
  patent: '专利包',
  production: '生产打样包',
  marketing: '宣发包',
  accessories: '配件包',
};

export const PACK_ORDER: PackKind[] = ['patent', 'accessories', 'production', 'marketing'];

export const VIDEO_TEMPLATES = [
  {
    id: 'video_turntable',
    title: '360 度旋转展示',
    description: '用于电商和内部评审，展示整体体积、正背侧轮廓。',
    duration: 6,
    ratio: '16:9',
    promptTemplate: '生成 360 度旋转展示视频：{character}. 白底或浅灰棚拍，镜头稳定，玩具缓慢旋转，展示正面、侧面、背面、顶部细节，真实毛绒质感。',
  },
  {
    id: 'video_unboxing',
    title: '开箱短片',
    description: '用于新品宣发，展示包装到玩具出现的过程。',
    duration: 8,
    ratio: '9:16',
    promptTemplate: '生成玩具开箱短片：{character}. 竖版社媒风格，从礼盒打开到玩具出现，温暖光线，突出礼物感和治愈感。',
  },
  {
    id: 'video_touch_detail',
    title: '触感细节',
    description: '展示揉捏、毛绒、刺绣和配件细节。',
    duration: 6,
    ratio: '9:16',
    promptTemplate: '生成玩具触感细节短片：{character}. 近景镜头，展示毛绒柔软、刺绣五官、配件细节和可抱触感，节奏轻柔。',
  },
  {
    id: 'video_story_intro',
    title: '角色故事介绍',
    description: '用于 IP 设定和社媒发布。',
    duration: 8,
    ratio: '16:9',
    promptTemplate: '生成玩具角色故事介绍视频：{character}. 轻剧情镜头，展示角色登场、表情、配件和性格气质，适合新品发布。',
  },
  {
    id: 'video_factory_preview',
    title: '工厂预览短片',
    description: '用于打样前内部沟通，展示外观、尺寸、材料、拆件和包装要点。',
    duration: 8,
    ratio: '16:9',
    promptTemplate: '生成工厂预览概念短片：{character}. 16:9，面向内部沟通，展示外观、尺寸、材料、拆件和包装要点，镜头清楚克制，不做消费者营销话术。',
  },
] as const;

export const CHARACTER_SPEC_FIELDS: Array<{ key: keyof CharacterSpec; label: string; hint: string }> = [
  { key: 'name', label: '名称', hint: '玩具/IP 名称' },
  { key: 'oneLiner', label: '一句话定位', hint: '面向谁、解决什么情绪或场景' },
  { key: 'targetUser', label: '目标用户', hint: '儿童、潮玩、礼品、品牌客户等' },
  { key: 'speciesShape', label: '物种/形态', hint: '动物、人形、怪兽、机甲、食物拟人等' },
  { key: 'bodyRatio', label: '身体比例', hint: '头身比、胖瘦、坐姿/站姿' },
  { key: 'faceFeatures', label: '五官表情', hint: '眼睛、嘴巴、腮红、表情、眉毛' },
  { key: 'colorPalette', label: '配色', hint: '主色、辅色、强调色、禁用色' },
  { key: 'materials', label: '材料', hint: '毛绒、刺绣、印花、塑料件、织带、金属件' },
  { key: 'accessories', label: '配件', hint: '衣服、帽子、背包、吊牌、电子件等' },
  { key: 'signatureElements', label: '识别元素', hint: '最能形成识别度的 3-5 个元素' },
  { key: 'manufacturingNotes', label: '生产提醒', hint: '避免过细尖角、过多小件等' },
  { key: 'patentFocus', label: '专利重点', hint: '希望保护的外观特征' },
  { key: 'marketingAngle', label: '营销角度', hint: '陪伴、治愈、收藏、科技感、礼物等' },
  { key: 'negativePrompt', label: '禁忌项', hint: '不要出现的元素' },
  { key: 'sourceImageId', label: '源图 ID', hint: '选中方案来源' },
  { key: 'sourceImageUrl', label: '源图链接', hint: '选中方案来源' },
  { key: 'lockedAt', label: '锁定时间', hint: '角色设定生成时间' },
];

const patentChecklist = [
  '白底或浅灰底，产品居中',
  '无营销文案、场景道具、水印和价格信息',
  '五官、配色、配件位置与源图保持一致',
  '视角和比例清楚，外观重点可见',
];

const productionChecklist = [
  '有清晰标注线和中文说明',
  '尺寸单位默认 cm，小部件可用 mm',
  '材料、工艺、颜色或结构信息足以支持工厂沟通',
  '不混入营销海报和场景背景',
];

const marketingChecklist = [
  '角色与锁定设定一致',
  '画面明确服务一个渠道或卖点',
  '文案不遮挡产品关键外观',
  '镜头、色温、背景质感与同包素材统一',
];

const textChecklist = [
  '围绕锁定 CharacterSpec，不改核心外观设定',
  '文字可直接复制给专利代理、工厂或宣发同事',
  '不要编造真实商标、认证编号、价格和不存在的法律结论',
  '保留待人工确认的尺寸、材料、色号或合规项',
];

export const TEXT_TEMPLATES: TextTemplate[] = [
  {
    id: 'text_project_design_brief',
    kind: 'project',
    title: '项目设计总说明',
    description: '概括玩具定位、核心外观、目标用户和三类输出包用途。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'project-design-brief',
    promptTemplate: '根据角色设定生成项目设计总说明：{character}. 说明产品定位、目标用户、整体外观、材料倾向、专利/生产/宣发三类用途，中文 300-500 字。',
    checklist: textChecklist,
  },
  {
    id: 'text_character_setting',
    kind: 'project',
    title: '角色设定说明',
    description: 'IP 名称、性格、故事背景、识别元素和禁忌项。',
    required: true,
    outputFormat: 'bullets',
    filenamePart: 'character-setting',
    promptTemplate: '根据角色设定生成 IP 角色设定说明：{character}. 输出名称、性格、故事背景、3-5 个识别元素、禁忌项和后续生成一致性要求。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_product_name',
    kind: 'patent',
    title: '外观设计产品名称',
    description: '用于专利申请的产品名称建议。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'patent-product-name',
    promptTemplate: '根据角色设定生成外观设计专利产品名称建议：{character}. 名称应简洁、客观、避免营销词，给出 3 个候选和推荐理由。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_product_use',
    kind: 'patent',
    title: '产品用途说明',
    description: '外观设计专利“产品用途”字段草稿。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'patent-product-use',
    promptTemplate: '根据角色设定生成外观设计专利产品用途说明：{character}. 用客观语言说明该产品用于玩具、摆件、陪伴礼品或收藏展示等用途，中文 80-150 字。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_design_points',
    kind: 'patent',
    title: '设计要点说明',
    description: '外观设计专利“设计要点”字段草稿。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'patent-design-points',
    promptTemplate: '根据角色设定生成外观设计专利设计要点：{character}. 聚焦形状、图案、色彩或其结合，说明最应保护的外观特征，避免功能性表述，中文 100-200 字。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_representative_view',
    kind: 'patent',
    title: '最能表明设计要点的图片',
    description: '建议指定主视图或立体图作为代表图。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'patent-representative-view',
    promptTemplate: '根据角色设定和专利视图清单，生成“最能表明设计要点的图片”建议：{character}. 从主视图、前侧立体图、局部图中推荐一个，并说明理由。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_view_brief',
    kind: 'patent',
    title: '各视图简要说明',
    description: '对应主视图、后视图、左右视图、俯仰视图、立体图和局部图。',
    required: true,
    outputFormat: 'table',
    filenamePart: 'patent-view-brief',
    promptTemplate: '根据角色设定生成外观设计专利各视图简要说明表：{character}. 覆盖主视图、后视图、左视图、右视图、俯视图、仰视图、前侧立体图、后侧立体图、局部放大图、使用状态图、成套产品图。',
    checklist: textChecklist,
  },
  {
    id: 'text_patent_color_claim',
    kind: 'patent',
    title: '色彩保护说明',
    description: '是否请求保护色彩的说明建议。',
    required: false,
    outputFormat: 'paragraph',
    filenamePart: 'patent-color-claim',
    promptTemplate: '根据角色设定生成外观设计专利色彩保护建议：{character}. 判断是否建议请求保护色彩，说明理由，并标记需由专利代理最终确认。',
    checklist: textChecklist,
  },
  {
    id: 'text_production_brief',
    kind: 'production',
    title: '工厂打样总说明',
    description: '给工厂的打样目标、尺寸、材料、结构和注意事项。',
    required: true,
    outputFormat: 'paragraph',
    filenamePart: 'production-brief',
    promptTemplate: '根据角色设定生成工厂打样总说明：{character}. 说明目标尺寸档、整体形态、材料倾向、软硬度、配件固定、缝线和待确认事项，中文 300-500 字。',
    checklist: textChecklist,
  },
  {
    id: 'text_production_cmf',
    kind: 'production',
    title: 'CMF 材料颜色工艺说明',
    description: '颜色、材料、表面工艺、刺绣/印花和填充说明。',
    required: true,
    outputFormat: 'table',
    filenamePart: 'production-cmf',
    promptTemplate: '根据角色设定生成 CMF 表格：{character}. 列出部位、建议材料、颜色/色号占位、工艺、风险和待确认项。',
    checklist: textChecklist,
  },
  {
    id: 'text_production_bom',
    kind: 'production',
    title: 'BOM 部件清单',
    description: '头、身体、四肢、耳朵、衣服、配件、包装等部件清单。',
    required: true,
    outputFormat: 'table',
    filenamePart: 'production-bom',
    promptTemplate: '根据角色设定生成毛绒玩具 BOM 部件清单：{character}. 包含部件名称、数量、材料、工艺、尺寸占位、供应/打样注意事项。',
    checklist: textChecklist,
  },
  {
    id: 'text_production_qc',
    kind: 'production',
    title: '打样验收标准',
    description: '尺寸偏差、颜色、刺绣、缝线、配件牢固度和安全提醒。',
    required: true,
    outputFormat: 'bullets',
    filenamePart: 'production-qc',
    promptTemplate: '根据角色设定生成工厂打样验收标准：{character}. 按尺寸、外观一致性、颜色、材料、刺绣印花、缝线、配件固定、包装和安全风险列出检查项。',
    checklist: textChecklist,
  },
  {
    id: 'text_accessory_brief',
    kind: 'accessories',
    title: '配件设计说明',
    description: '说明独立配件清单、外观特点、组合关系和保护/打样重点。',
    required: true,
    outputFormat: 'bullets',
    filenamePart: 'accessory-brief',
    promptTemplate: '根据角色设定生成配件设计说明：{character}. 列出所有独立配件、每个配件的外观特点、与主娃娃的组合关系、是否可拆、专利保护重点和打样注意事项。',
    checklist: textChecklist,
  },
  {
    id: 'text_accessory_bom',
    kind: 'accessories',
    title: '配件 BOM 与工艺清单',
    description: '独立配件的材料、数量、尺寸、连接方式和工艺。',
    required: true,
    outputFormat: 'table',
    filenamePart: 'accessory-bom',
    promptTemplate: '根据角色设定生成配件 BOM 与工艺清单：{character}. 表格列出配件名称、数量、材料、颜色、尺寸占位、连接方式、工艺、安全风险和待确认项。',
    checklist: textChecklist,
  },
  {
    id: 'text_marketing_core_copy',
    kind: 'marketing',
    title: '核心卖点文案',
    description: '主标题、副标题、3-5 个卖点和短描述。',
    required: true,
    outputFormat: 'bullets',
    filenamePart: 'marketing-core-copy',
    promptTemplate: '根据角色设定生成宣发核心文案：{character}. 输出主标题 5 个、副标题 5 个、3-5 个卖点、短描述 3 版，适合电商和社媒。',
    checklist: textChecklist,
  },
  {
    id: 'text_marketing_detail_page',
    kind: 'marketing',
    title: '电商详情页文字结构',
    description: '详情页模块标题、正文、卖点、尺寸、材料和包装说明。',
    required: true,
    outputFormat: 'table',
    filenamePart: 'marketing-detail-page',
    promptTemplate: '根据角色设定生成电商详情页文字结构：{character}. 按模块输出标题、正文、配图建议、卖点、尺寸/材料/包装说明，中文。',
    checklist: textChecklist,
  },
  {
    id: 'text_marketing_social_posts',
    kind: 'marketing',
    title: '社媒发布文案',
    description: '小红书、朋友圈、短视频标题和标签。',
    required: false,
    outputFormat: 'bullets',
    filenamePart: 'marketing-social-posts',
    promptTemplate: '根据角色设定生成社媒发布文案：{character}. 输出小红书标题 10 个、正文 3 版、短视频标题 10 个、标签建议，避免夸大宣传。',
    checklist: textChecklist,
  },
  {
    id: 'text_video_script_pack',
    kind: 'video',
    title: '视频脚本文字包',
    description: '旋转展示、开箱、触感、角色故事、工厂预览的旁白和字幕。',
    required: false,
    outputFormat: 'script',
    filenamePart: 'video-script-pack',
    promptTemplate: '根据角色设定生成视频脚本文字包：{character}. 覆盖 360 旋转、开箱、触感细节、角色故事、工厂预览，每条包含镜头、字幕、旁白、时长和画面说明。',
    checklist: textChecklist,
  },
];

export const PATENT_TEMPLATES: AssetTemplate[] = [
  {
    id: 'patent_front',
    kind: 'patent',
    view: 'front',
    title: '主视图',
    description: '正面外观，是外观保护的核心视角。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'front',
    promptTemplate: '生成外观设计专利主视图：{character}. 正面正交视角，白底，产品居中，比例统一，无文字无水印无场景道具，清楚展示五官、身体比例、配色和配件。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_back',
    kind: 'patent',
    view: 'back',
    title: '后视图',
    description: '展示背部、后脑、尾巴、标签和后侧配件。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'back',
    promptTemplate: '生成外观设计专利后视图：{character}. 背面正交视角，白底，产品居中，比例与主视图一致，无文字无水印，清楚展示背部结构、尾巴、标签位和后侧配件。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_left',
    kind: 'patent',
    view: 'left',
    title: '左视图',
    description: '展示侧面厚度、鼻子凸起、耳朵和四肢外凸关系。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'left',
    promptTemplate: '生成外观设计专利左视图：{character}. 左侧正交视角，白底，比例统一，无文字无水印，突出厚度、耳朵角度、鼻子凸起、手脚位置。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_right',
    kind: 'patent',
    view: 'right',
    title: '右视图',
    description: '确认侧面对称性或非对称外观。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'right',
    promptTemplate: '生成外观设计专利右视图：{character}. 右侧正交视角，白底，比例统一，无文字无水印，确认侧面轮廓、配件和四肢关系。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_top',
    kind: 'patent',
    view: 'top',
    title: '俯视图',
    description: '展示头顶、耳朵、角、帽子或顶部装饰。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'top',
    promptTemplate: '生成外观设计专利俯视图：{character}. 从正上方观察，白底，产品居中，无文字无水印，展示头顶、耳朵、角、发饰、帽子和顶部轮廓。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_bottom',
    kind: 'patent',
    view: 'bottom',
    title: '仰视图',
    description: '展示脚底、底部标签、底盘和坐姿稳定结构。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'bottom',
    promptTemplate: '生成外观设计专利仰视图：{character}. 从正下方观察，白底，产品居中，无文字无水印，展示脚底、底部标签、底盘形态和底部轮廓。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_perspective_front',
    kind: 'patent',
    view: 'perspective_front',
    title: '前侧立体图',
    description: '45 度前侧展示整体体积和外观印象。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'perspective-front',
    promptTemplate: '生成外观设计专利前 45 度立体图：{character}. 白底，产品居中，无文字无水印，展示整体体积、正面五官、身体厚度和主要配件。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_perspective_back',
    kind: 'patent',
    view: 'perspective_back',
    title: '后侧立体图',
    description: '45 度后侧补充背部和体积信息。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'perspective-back',
    promptTemplate: '生成外观设计专利后 45 度立体图：{character}. 白底，产品居中，无文字无水印，展示背面轮廓、尾巴、后侧配件和整体厚度。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_detail_face',
    kind: 'patent',
    view: 'detail_face',
    title: '脸部局部放大',
    description: '放大眼睛、嘴巴、腮红和表情细节。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'detail-face',
    promptTemplate: '生成外观设计专利脸部局部放大图：{character}. 白底，无文字无水印，只放大脸部区域，清楚展示眼睛、嘴巴、腮红、表情和刺绣/印花边界。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_detail_accessory',
    kind: 'patent',
    view: 'detail_accessory',
    title: '配件局部放大',
    description: '放大服装、尾巴、背包或机械件等识别部件。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'detail-accessory',
    promptTemplate: '生成外观设计专利配件局部放大图：{character}. 白底，无文字无水印，放大最具识别度的配件、服装、尾巴、背包或机械部件。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_use_state',
    kind: 'patent',
    view: 'use_state',
    title: '使用状态参考图',
    description: '当有可拆、可变形、互动结构时，展示使用或组合状态。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'use-state',
    promptTemplate: '生成外观设计专利使用状态参考图：{character}. 白底或浅灰底，无营销文案无水印，展示可拆卸配件、可互动结构、摆放或抱持状态；画面仅用于说明产品外观状态，不加入场景道具。',
    checklist: patentChecklist,
  },
  {
    id: 'patent_set_view',
    kind: 'patent',
    view: 'set_view',
    title: '成套产品图',
    description: '当娃娃与配件/包装成套申请时，展示组合状态。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'set-view',
    promptTemplate: '生成外观设计专利成套产品图：{character}. 白底，无文字无水印，将主娃娃、核心配件和包装/说明卡按成套申请视角整齐摆放，比例统一，清楚表达组合外观。',
    checklist: patentChecklist,
  },
];

export const PRODUCTION_TEMPLATES: AssetTemplate[] = [
  {
    id: 'prod_front_spec',
    kind: 'production',
    view: 'front_spec',
    title: '正面打样图',
    description: '标注总高、头宽、身体宽和手脚位置。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'front-spec',
    promptTemplate: '生成毛绒玩具生产正面打样图：{character}. 正面正交视角，白底，带清晰尺寸标注线和中文标注：总高、头宽、身体宽、手长、腿长、关键配件位置。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_back_spec',
    kind: 'production',
    view: 'back_spec',
    title: '背面打样图',
    description: '标注背部结构、尾巴、标签位和缝线。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'back-spec',
    promptTemplate: '生成毛绒玩具生产背面打样图：{character}. 背面正交视角，白底，带中文标注：后脑、背部拼接、尾巴、标签位、缝线和后侧配件。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_left_spec',
    kind: 'production',
    view: 'left_spec',
    title: '左侧打样图',
    description: '标注厚度、鼻子凸起、耳朵角度。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'left-spec',
    promptTemplate: '生成毛绒玩具生产左侧打样图：{character}. 左侧正交视角，白底，带中文尺寸标注：头部厚度、身体厚度、鼻子凸起、耳朵角度、四肢侧面位置。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_right_spec',
    kind: 'production',
    view: 'right_spec',
    title: '右侧打样图',
    description: '确认侧面对称性或非对称细节。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'right-spec',
    promptTemplate: '生成毛绒玩具生产右侧打样图：{character}. 右侧正交视角，白底，带中文尺寸标注，确认侧面厚度、配件位置和非对称细节。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_top_spec',
    kind: 'production',
    view: 'top_spec',
    title: '俯视打样图',
    description: '标注头顶结构、顶部配件和俯视轮廓。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'top-spec',
    promptTemplate: '生成毛绒玩具生产俯视打样图：{character}. 从正上方观察，白底，带中文尺寸标注：头顶结构、耳朵/角/帽子位置、顶部配件、头部宽深比例。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_bottom_spec',
    kind: 'production',
    view: 'bottom_spec',
    title: '仰视打样图',
    description: '标注脚底、防滑布、底部标签和底部结构。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'bottom-spec',
    promptTemplate: '生成毛绒玩具生产仰视打样图：{character}. 从正下方观察，白底，带中文标注：脚底、防滑布、底部标签、底盘结构、坐姿稳定接触面。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_dimension_overall',
    kind: 'production',
    view: 'dimension_overall',
    title: '整体尺寸图',
    description: '标注总高、坐高、臂展和头身比。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'dimension-overall',
    promptTemplate: '生成毛绒玩具整体尺寸图：{character}. 白底，技术说明风格，标注总高、坐高、臂展、头身比、头宽、身体宽，单位 cm。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_dimension_parts',
    kind: 'production',
    view: 'dimension_parts',
    title: '部件尺寸图',
    description: '标注耳朵、角、尾巴、包、配件和四肢尺寸。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'dimension-parts',
    promptTemplate: '生成毛绒玩具部件尺寸图：{character}. 技术说明版式，拆出耳朵、角、尾巴、包、衣服/配件、四肢，标注长宽厚和数量，单位 cm，小部件可用 mm。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_scale_reference',
    kind: 'production',
    view: 'scale_reference',
    title: '比例参考图',
    description: '用手持或常见物辅助工厂理解尺寸。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'scale-reference',
    promptTemplate: '生成玩具比例参考图：{character}. 手持或桌面常见物对比，只用于生产沟通，清楚表达 20cm/30cm/45cm 三档尺寸感，不加入营销海报元素。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_material_board',
    kind: 'production',
    view: 'material_board',
    title: '材料工艺板',
    description: '说明面料、刺绣、印花、塑料件和填充。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'material-board',
    promptTemplate: '生成毛绒玩具材料工艺板：{character}. 干净版式，包含面料样块、刺绣/印花说明、塑料件/织带/金属件说明、填充软硬度和坐姿稳定要求，中文标注。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_color_board',
    kind: 'production',
    view: 'color_board',
    title: '颜色板',
    description: '主色、辅色、五官、衣服和配件色。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'color-board',
    promptTemplate: '生成毛绒玩具颜色板：{character}. 包含主色、辅色、强调色、五官色、衣服/配件色，给出 HEX 色值和建议 Pantone 占位，中文标注。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_embroidery_detail',
    kind: 'production',
    view: 'embroidery_detail',
    title: '刺绣印花细节',
    description: '放大眼睛、嘴、腮红、图案和 Logo 工艺。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'embroidery-detail',
    promptTemplate: '生成毛绒玩具刺绣/印花细节图：{character}. 放大眼睛、嘴巴、腮红、身体图案和标识，标注刺绣线色、印花边界、针距/线宽占位和工艺注意事项。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_seam_map',
    kind: 'production',
    view: 'seam_map',
    title: '缝线拼接图',
    description: '标注头身、耳朵、四肢和配件连接方式。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'seam-map',
    promptTemplate: '生成毛绒玩具缝线/拼接线图：{character}. 白底技术图风格，用虚线或彩色线标注头身连接、耳朵连接、四肢连接、配件固定点和开口返口位置，中文说明。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_filling_spec',
    kind: 'production',
    view: 'filling_spec',
    title: '填充说明图',
    description: '说明软硬度、重心、坐姿稳定和填充区域。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'filling-spec',
    promptTemplate: '生成毛绒玩具填充说明图：{character}. 剖面/分区技术说明风格，标注 PP 棉填充区域、软硬度、重心、坐姿稳定要求和不可过硬区域。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_part_breakdown',
    kind: 'production',
    view: 'part_breakdown',
    title: '拆件图',
    description: '拆分头、身体、四肢、耳朵、服装和配件。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'part-breakdown',
    promptTemplate: '生成毛绒玩具拆件图：{character}. 技术图风格，白底，将头、身体、四肢、耳朵、服装、配件分开展示，带中文部件名称和数量标注。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_accessory_sheet',
    kind: 'production',
    view: 'accessory_sheet',
    title: '配件单页',
    description: '独立展示帽子、背包、吊牌、可拆物等。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'accessory-sheet',
    promptTemplate: '生成玩具配件单页：{character}. 将帽子、背包、吊牌、可拆物、电子件或装饰件独立展示，标注数量、材料、连接方式和尺寸建议，中文技术版式。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_packaging_structure',
    kind: 'production',
    view: 'packaging_structure',
    title: '包装结构图',
    description: '礼盒、吊卡、内托和说明卡草案。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'packaging-structure',
    promptTemplate: '生成玩具包装结构草图：{character}. 展示礼盒、吊卡、内托、说明卡和包装尺寸建议，干净白底，中文标注，适合给工厂沟通。',
    checklist: productionChecklist,
  },
  {
    id: 'prod_label_tag',
    kind: 'production',
    view: 'label_tag',
    title: '标签吊牌图',
    description: '吊牌、水洗标和品牌标位置与内容草案。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'label-tag',
    promptTemplate: '生成玩具标签吊牌说明图：{character}. 展示吊牌、水洗标、品牌标的位置和内容草案，包含尺寸建议和中文标注，白底技术版式。',
    checklist: productionChecklist,
  },
];

export const ACCESSORY_TEMPLATES: AssetTemplate[] = [
  {
    id: 'acc_inventory_sheet',
    kind: 'accessories',
    view: 'inventory_sheet',
    title: '配件总览清单',
    description: '识别并汇总所有独立配件、可拆件、包装随附物。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'inventory-sheet',
    promptTemplate: '生成玩具配件总览清单图：{character}. 白底技术版式，识别并摆放所有独立配件、可拆件、服饰、背包、吊牌、包装随附物，标注名称、数量、是否可拆和用途。',
    checklist: productionChecklist,
  },
  {
    id: 'acc_front',
    kind: 'accessories',
    view: 'front',
    title: '配件主视图',
    description: '独立配件正面视图。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'front',
    promptTemplate: '生成独立配件外观主视图：{character}. 仅展示最核心独立配件或配件组，正面正交视角，白底，产品居中，无营销文案，比例统一。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_back',
    kind: 'accessories',
    view: 'back',
    title: '配件后视图',
    description: '独立配件背面视图。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'back',
    promptTemplate: '生成独立配件外观后视图：{character}. 仅展示最核心独立配件或配件组，背面正交视角，白底，产品居中，无营销文案，展示背部结构、连接点和标签位。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_left',
    kind: 'accessories',
    view: 'left',
    title: '配件左视图',
    description: '独立配件左侧厚度和连接关系。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'left',
    promptTemplate: '生成独立配件外观左视图：{character}. 左侧正交视角，白底，产品居中，无营销文案，展示配件厚度、扣件、绑带、卡扣或缝合连接结构。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_right',
    kind: 'accessories',
    view: 'right',
    title: '配件右视图',
    description: '独立配件右侧厚度和非对称细节。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'right',
    promptTemplate: '生成独立配件外观右视图：{character}. 右侧正交视角，白底，产品居中，无营销文案，确认配件侧面轮廓、厚度、扣件和非对称细节。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_top',
    kind: 'accessories',
    view: 'top',
    title: '配件俯视图',
    description: '独立配件顶部轮廓。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'top',
    promptTemplate: '生成独立配件外观俯视图：{character}. 从正上方观察配件，白底，产品居中，无营销文案，展示顶部轮廓、开口、扣件或装饰。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_bottom',
    kind: 'accessories',
    view: 'bottom',
    title: '配件仰视图',
    description: '独立配件底部和固定结构。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'bottom',
    promptTemplate: '生成独立配件外观仰视图：{character}. 从正下方观察配件，白底，产品居中，无营销文案，展示底部结构、固定点、标签或接触面。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_perspective_front',
    kind: 'accessories',
    view: 'perspective_front',
    title: '配件前侧立体图',
    description: '45 度展示配件整体体积。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'perspective-front',
    promptTemplate: '生成独立配件前 45 度立体图：{character}. 白底，产品居中，无营销文案，展示配件整体体积、正面细节、厚度和连接结构。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_perspective_back',
    kind: 'accessories',
    view: 'perspective_back',
    title: '配件后侧立体图',
    description: '45 度展示配件背部和连接点。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'perspective-back',
    promptTemplate: '生成独立配件后 45 度立体图：{character}. 白底，产品居中，无营销文案，展示配件背部轮廓、固定点、扣件、绑带或缝合连接结构。',
    checklist: patentChecklist,
  },
  {
    id: 'acc_detail_connection',
    kind: 'accessories',
    view: 'detail_connection',
    title: '配件连接结构放大',
    description: '放大卡扣、绑带、魔术贴、缝线或磁吸等连接方式。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'detail-connection',
    promptTemplate: '生成配件连接结构局部放大图：{character}. 白底技术说明风格，放大卡扣、绑带、魔术贴、缝线、磁吸或插扣连接位置，中文标注连接方式和打样注意事项。',
    checklist: productionChecklist,
  },
  {
    id: 'acc_dimension_spec',
    kind: 'accessories',
    view: 'dimension_spec',
    title: '配件尺寸标注图',
    description: '标注配件长宽厚、连接点和安全尺寸。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'dimension-spec',
    promptTemplate: '生成配件尺寸标注图：{character}. 技术图版式，标注每个独立配件的长、宽、厚、连接点距离、卡扣/绑带尺寸和安全圆角要求，单位 cm/mm。',
    checklist: productionChecklist,
  },
  {
    id: 'acc_material_process',
    kind: 'accessories',
    view: 'material_process',
    title: '配件材料工艺说明图',
    description: '说明配件材料、颜色、工艺和安全风险。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'material-process',
    promptTemplate: '生成配件材料工艺说明图：{character}. 列出独立配件的材料、颜色、表面工艺、固定方式、边缘处理、安全风险和待确认项，中文标注。',
    checklist: productionChecklist,
  },
  {
    id: 'acc_with_doll_assembly',
    kind: 'accessories',
    view: 'with_doll_assembly',
    title: '配件与主娃娃组合图',
    description: '展示配件安装到主娃娃后的组合状态。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'with-doll-assembly',
    promptTemplate: '生成配件与主娃娃组合说明图：{character}. 展示配件安装到主娃娃前后对比、安装位置、连接方向、组合状态和拆卸状态，白底，中文标注。',
    checklist: productionChecklist,
  },
];

export const MARKETING_TEMPLATES: AssetTemplate[] = [
  {
    id: 'mkt_hero_kv',
    kind: 'marketing',
    view: 'hero_kv',
    title: '主视觉 KV',
    description: '一眼讲清角色、气质和核心卖点。',
    required: true,
    aspectRatio: '16:9',
    filenamePart: 'hero-kv',
    promptTemplate: '生成玩具新品主视觉 KV：{character}. 高级商业摄影，干净但有情绪的背景，突出角色核心卖点，可加入简洁中文标题占位，但不要遮挡产品。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_white_front',
    kind: 'marketing',
    view: 'white_front',
    title: '白底正面商品图',
    description: '电商基础商品图。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'white-front',
    promptTemplate: '生成电商白底商品图：{character}. 正面，产品居中，柔和阴影，高清质感，无多余文字，适合主图。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_white_45',
    kind: 'marketing',
    view: 'white_45',
    title: '白底 45 度商品图',
    description: '展示体积和可爱感。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'white-45',
    promptTemplate: '生成电商白底 45 度商品图：{character}. 前侧 45 度，产品居中，柔和阴影，展示整体体积、毛绒质感和主要配件。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_white_back',
    kind: 'marketing',
    view: 'white_back',
    title: '白底背面商品图',
    description: '展示背部和后侧细节。',
    required: true,
    aspectRatio: '1:1',
    filenamePart: 'white-back',
    promptTemplate: '生成电商白底背面商品图：{character}. 背面，产品居中，柔和阴影，展示背部、尾巴、标签和后侧配件。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_detail_face',
    kind: 'marketing',
    view: 'detail_face',
    title: '脸部细节图',
    description: '展示五官、刺绣和表情。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'detail-face',
    promptTemplate: '生成玩具脸部细节宣发图：{character}. 近景特写，突出眼睛、嘴巴、腮红、刺绣/印花工艺和治愈表情，可加入简短卖点文案。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_detail_material',
    kind: 'marketing',
    view: 'detail_material',
    title: '面料触感图',
    description: '展示毛绒、填充和触感卖点。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'detail-material',
    promptTemplate: '生成玩具面料触感宣发图：{character}. 微距商业摄影，突出毛绒质感、柔软填充、可抱触感，可加入简短中文卖点。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_detail_accessory',
    kind: 'marketing',
    view: 'detail_accessory',
    title: '配件卖点图',
    description: '突出服装、配件、机关或标志性部件。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'detail-accessory',
    promptTemplate: '生成玩具配件/服装/机关细节宣发图：{character}. 近景商业摄影，突出最具识别度的配件、服装、尾巴、背包或机械件，可加入简短卖点文案。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_scene_bedroom',
    kind: 'marketing',
    view: 'scene_bedroom',
    title: '卧室陪伴场景',
    description: '床头、儿童房或治愈陪伴场景。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'scene-bedroom',
    promptTemplate: '生成玩具卧室陪伴场景图：{character}. 温暖床头或儿童房场景，柔和自然光，突出陪伴、治愈和礼物感。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_scene_desk',
    kind: 'marketing',
    view: 'scene_desk',
    title: '桌面陪伴场景',
    description: '办公桌、学习桌或创作桌场景。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'scene-desk',
    promptTemplate: '生成玩具桌面陪伴场景图：{character}. 办公桌/学习桌/创作桌场景，清爽自然光，突出日常陪伴、桌搭和收藏展示感。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_scene_gift',
    kind: 'marketing',
    view: 'scene_gift',
    title: '礼物开箱场景',
    description: '礼物、节日、开箱和赠送场景。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'scene-gift',
    promptTemplate: '生成玩具礼物/节日/开箱场景图：{character}. 温暖礼物氛围，展示包装、打开瞬间和产品露出，突出送礼、惊喜和治愈感。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_size_lifestyle',
    kind: 'marketing',
    view: 'size_lifestyle',
    title: '尺寸对比图',
    description: '用手持、桌面或沙发对比表达尺寸。',
    required: true,
    aspectRatio: '4:5',
    filenamePart: 'size-lifestyle',
    promptTemplate: '生成玩具尺寸对比宣发图：{character}. 手持或桌面生活方式场景，体现真实大小和可抱感，可加入尺寸文案占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_social_square',
    kind: 'marketing',
    view: 'social_square',
    title: '社媒方形封面',
    description: '社媒 1:1 封面图。',
    required: false,
    aspectRatio: '1:1',
    filenamePart: 'social-square',
    promptTemplate: '生成社媒 1:1 方形封面图：{character}. 强视觉中心，适合小红书/微博/朋友圈，留出短标题区域，产品不变形，整体风格与宣发包统一。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_social_vertical',
    kind: 'marketing',
    view: 'social_vertical',
    title: '竖版社媒封面',
    description: '小红书、短视频封面，3:4 或 9:16。',
    required: false,
    aspectRatio: '9:16',
    filenamePart: 'social-vertical',
    promptTemplate: '生成竖版社媒封面图：{character}. 9:16，适合小红书/短视频，强视觉中心，留出标题区域，产品不变形，风格统一。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_packaging_render',
    kind: 'marketing',
    view: 'packaging_render',
    title: '包装渲染图',
    description: '展示包装外观、开窗、内托和礼盒质感。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'packaging-render',
    promptTemplate: '生成玩具包装商业渲染图：{character}. 展示礼盒、开窗、内托、吊卡或说明卡，商业摄影质感，包装风格与角色一致，可加入品牌占位但不要真实商标。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_character_story',
    kind: 'marketing',
    view: 'character_story',
    title: '角色故事图',
    description: '表达 IP 性格、故事和情绪价值。',
    required: false,
    aspectRatio: '4:5',
    filenamePart: 'character-story',
    promptTemplate: '生成 IP 角色故事宣发图：{character}. 结构化版式，包含角色名字、性格关键词、故事短句、陪伴场景和核心识别元素，中文文案占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'mkt_ecommerce_longpage',
    kind: 'marketing',
    view: 'ecommerce_longpage',
    title: '电商详情页模块',
    description: '整合概念、尺寸、材质、卖点和包装。',
    required: false,
    aspectRatio: 'long',
    filenamePart: 'ecommerce-longpage',
    promptTemplate: '生成电商详情页长图模块：{character}. 结构化版式，包含角色故事、核心卖点、尺寸、材质、细节、包装展示，中文标题和短文案占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'video_turntable',
    kind: 'marketing',
    view: 'video_turntable',
    title: '360 度旋转视频脚本',
    description: '电商 360 度转台展示分镜。',
    required: false,
    aspectRatio: '16:9',
    filenamePart: 'video-turntable',
    promptTemplate: '生成 360 度旋转展示短视频分镜板：{character}. 16:9，包含 6 个镜头缩略画面和中文脚本：正面、左前 45 度、侧面、背面、右前 45 度、回到正面，适合电商展示。',
    checklist: marketingChecklist,
  },
  {
    id: 'video_unboxing',
    kind: 'marketing',
    view: 'video_unboxing',
    title: '开箱视频脚本',
    description: '包装到娃娃展示的开箱流程。',
    required: false,
    aspectRatio: '16:9',
    filenamePart: 'video-unboxing',
    promptTemplate: '生成玩具开箱短视频分镜板：{character}. 16:9，包含包装特写、打开、取出、细节、抱持展示、结尾定格，中文脚本和镜头时长占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'video_touch_detail',
    kind: 'marketing',
    view: 'video_touch_detail',
    title: '触感细节视频脚本',
    description: '揉捏、触感和细节特写分镜。',
    required: false,
    aspectRatio: '16:9',
    filenamePart: 'video-touch-detail',
    promptTemplate: '生成玩具触感细节短视频分镜板：{character}. 16:9，展示揉捏、毛绒触感、刺绣细节、配件互动和恢复形态，中文脚本占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'video_story_intro',
    kind: 'marketing',
    view: 'video_story_intro',
    title: '角色设定短片脚本',
    description: '社媒角色介绍短片分镜。',
    required: false,
    aspectRatio: '9:16',
    filenamePart: 'video-story-intro',
    promptTemplate: '生成竖版角色设定短片分镜板：{character}. 9:16，适合社媒，包含角色登场、性格关键词、陪伴场景、卖点定格和结尾 CTA，中文脚本占位。',
    checklist: marketingChecklist,
  },
  {
    id: 'video_factory_preview',
    kind: 'marketing',
    view: 'video_factory_preview',
    title: '工厂预览视频脚本',
    description: '打样前内部沟通概念展示分镜。',
    required: false,
    aspectRatio: '16:9',
    filenamePart: 'video-factory-preview',
    promptTemplate: '生成工厂预览概念短片分镜板：{character}. 16:9，面向内部沟通，展示外观、尺寸、材料、拆件和包装要点，中文说明占位，不做消费者营销话术。',
    checklist: marketingChecklist,
  },
];

function withPackAnchor(templates: AssetTemplate[], rootTemplateId: string): AssetTemplate[] {
  return templates.map(template => ({
    ...template,
    anchorTemplateId: template.id === rootTemplateId ? undefined : rootTemplateId,
  }));
}

export const PACK_TEMPLATES: Record<PackKind, AssetTemplate[]> = {
  patent: withPackAnchor(PATENT_TEMPLATES, 'patent_front'),
  accessories: withPackAnchor(ACCESSORY_TEMPLATES, 'acc_inventory_sheet'),
  production: withPackAnchor(PRODUCTION_TEMPLATES, 'prod_front_spec'),
  marketing: withPackAnchor(MARKETING_TEMPLATES, 'mkt_white_front'),
};

export const PACK_TEMPLATE_SUMMARY = PACK_ORDER.map(kind => ({
  kind,
  label: PACK_LABELS[kind],
  totalCount: PACK_TEMPLATES[kind].length,
  requiredCount: PACK_TEMPLATES[kind].filter(template => template.required).length,
  optionalCount: PACK_TEMPLATES[kind].filter(template => !template.required).length,
}));

export const TEMPLATE_SLOT_SUMMARY = {
  templateFreezeVersion: TEMPLATE_FREEZE_VERSION,
  imageAssetCount: PACK_TEMPLATE_SUMMARY.reduce((sum, pack) => sum + pack.totalCount, 0),
  requiredImageAssetCount: PACK_TEMPLATE_SUMMARY.reduce((sum, pack) => sum + pack.requiredCount, 0),
  optionalImageAssetCount: PACK_TEMPLATE_SUMMARY.reduce((sum, pack) => sum + pack.optionalCount, 0),
  textAssetCount: TEXT_TEMPLATES.length,
  requiredTextAssetCount: TEXT_TEMPLATES.filter(template => template.required).length,
  optionalTextAssetCount: TEXT_TEMPLATES.filter(template => !template.required).length,
  videoTaskCount: VIDEO_TEMPLATES.length,
  storyboardAssetCount: MARKETING_TEMPLATES.filter(template => template.id.startsWith('video_')).length,
  totalReservedSlotCount: PACK_TEMPLATE_SUMMARY.reduce((sum, pack) => sum + pack.totalCount, 0) + TEXT_TEMPLATES.length + VIDEO_TEMPLATES.length,
  packSummary: PACK_TEMPLATE_SUMMARY,
};

export function getPackTemplates(kind: PackKind): AssetTemplate[] {
  return PACK_TEMPLATES[kind];
}

export function renderCharacterSummary(spec: CharacterSpec): string {
  return [
    `${spec.name}，${spec.oneLiner}`,
    `目标用户：${spec.targetUser}`,
    `形态：${spec.speciesShape}`,
    `比例：${spec.bodyRatio}`,
    `五官：${spec.faceFeatures}`,
    `配色：${spec.colorPalette.join('、')}`,
    `材料：${spec.materials.join('、')}`,
    `配件：${spec.accessories.join('、')}`,
    `识别元素：${spec.signatureElements.join('、')}`,
    `专利重点：${spec.patentFocus.join('、')}`,
    `营销角度：${spec.marketingAngle.join('、')}`,
    `生成约束：${spec.negativePrompt}`,
  ].join('；');
}
