import fs from "node:fs/promises";
import path from "node:path";
import { Document, HeadingLevel, ImageRun, Packer, Paragraph, TextRun } from "docx";

const root = process.cwd();
const outputDirectory = path.join(root, "tests", "fixtures");
const imageFile = "/Users/mac/Desktop/test.png";
const marker = "YINZHUANG-PRODUCTION-IMPORT-20260731";

await fs.mkdir(outputDirectory, { recursive: true });
await fs.writeFile(path.join(outputDirectory, "import-test.md"), [
  "# 旧银来料加工前，建议先确认这五件事",
  "",
  "家里闲置的旧银，可能是一只不再合圈口的手镯，也可能是一件承载着家庭记忆的老首饰。把旧银重新设计、熔炼打制，可以让熟悉的材质延续新的故事。为了让沟通和制作更顺利，送到门店前建议先确认下面五件事。",
  "",
  "![旧银来料加工沟通示意图]({{TEST_IMAGE_URL}})",
  "",
  "## 一、先明确想做成什么",
  "",
  "可以先说明佩戴者、使用场景、喜欢的风格和预算。例如，是把旧银改成日常佩戴的实心手镯，还是制作一对带纪念刻字的戒指。参考图能帮助表达方向，但最终还要结合银料重量、尺寸和工艺可行性判断。",
  "",
  "## 二、现场确认来料状态与重量",
  "",
  "门店会先检查旧银的状态、材质标识和重量，再说明哪些部分可以继续使用。熔炼、修整和抛光会产生合理损耗，因此加工前应把称重结果、预计损耗和成品目标重量沟通清楚。",
  "",
  "## 三、把尺寸测准确",
  "",
  "手镯需要确认圈口和佩戴松紧，戒指需要测量指围，项链则要确认链长。足银质地较软，结构、克重与尺寸会共同影响稳定性和佩戴体验，不能只按外观决定。",
  "",
  "## 四、分开了解银料与工费",
  "",
  "光面、古法、磨砂、浮雕、錾刻、镂空和花丝等工艺所需时间与难度不同。建议在制作前确认来料处理、设计、工艺和附加定制分别如何计费，并核对预计交付时间。",
  "",
  "## 五、保留好确认信息",
  "",
  "款式、尺寸、刻字内容、重量、损耗、工费和交付时间都确认后，再进入制作环节。成品交付时，可以再次核对结构、表面状态和后续养护方式。",
  "",
  "银妆深耕银饰行业 14 年，提供来料私人加工、专属雕刻和现场打制等服务。复杂图案或特殊结构建议提前沟通，让匠人根据银料和用途给出更稳妥的方案。",
  "",
  `测试标记：${marker}-MARKDOWN`,
  "",
].join("\n"));

const image = await fs.readFile(imageFile);
const heading = (text) => new Paragraph({ text, heading: HeadingLevel.HEADING_2 });
const body = (text) => new Paragraph({ children: [new TextRun(text)] });
const document = new Document({
  sections: [{
    children: [
      new Paragraph({ text: "足银手镯日常佩戴与养护指南", heading: HeadingLevel.HEADING_1 }),
      body("足银手镯质地温润，也比许多合金首饰更柔软。日常佩戴时兼顾清洁、收纳与受力保护，能让手镯更长久地保持光泽和形态。"),
      new Paragraph({ children: [new ImageRun({ data: image, transformation: { width: 320, height: 210 }, type: "png", altText: { title: "银饰养护测试图片", description: "用于验证 Word 导入图片提取", name: "test.png" } })] }),
      heading("佩戴前确认圈口与结构"),
      body("手掌最宽处、腕围和个人松紧偏好都会影响圈口选择。第一次购买建议到店试戴或在顾问指导下测量。足银手镯的实心、空心、开口、闭口和推拉结构受力方式不同，日常佩戴前应先了解正确的开合与调整方法。"),
      heading("减少化学接触和重压"),
      body("洗澡、游泳、泡温泉、运动或做家务时，可以暂时取下手镯。香水、发胶和护肤品使用后，待皮肤表面干燥再佩戴。足银质地较软，应避免用力掰折、碰撞和重压；如出现变形，交给专业门店检查调整更稳妥。"),
      heading("不佩戴时单独密封"),
      body("收纳前先用柔软布料擦去表面汗液，再放入密封袋或首饰盒。不同硬度、不同表面工艺的首饰尽量分开，避免互相摩擦。潮湿环境和长期裸露收纳都可能加快银饰氧化。"),
      heading("根据工艺选择清洁方式"),
      body("光面素银可用专业擦银布轻拭；做旧、鎏金、珐琅、珍珠或镶嵌款，不建议自行使用强效清洁液，以免破坏原有效果。银饰氧化发黑属于常见现象，并不等于材质有问题。"),
      heading("定期使用专业养护"),
      body("银妆采用足银 999/9999 国标银料，产品配套质检证书，并为所售银饰提供终身免费清洗、抛光、去氧化及基础整形服务。日常轻柔佩戴、正确收纳，再配合专业养护，能让银饰持续陪伴重要时刻。"),
      body(`测试标记：${marker}-WORD`),
    ],
  }],
});
await fs.writeFile(path.join(outputDirectory, "import-test.docx"), await Packer.toBuffer(document));

console.log(`Created fixtures in ${outputDirectory}`);
