(() => {
  const VERSION = "2026-08-21.1";
  const UPDATED_AT = "2026 年 8 月 21 日";
  const SEEN_STORAGE_KEY = "mmw.qianchuanAgent.usageNoticeSeen.v1";
  const TRIGGER_LABELS = {
    first_open: "首次打开千川 Agent",
    manual: "查看千川 Agent 使用须知"
  };
  const SECTIONS = [
    {
      title: "一、新手怎么开始",
      paragraphs: [
        "新手建议先启用需要的规则任务，并将运行模式保持为“人工确认”。Agent 会按已保存的阈值和轮巡间隔盯盘；出现调控建议时先等待人工审核，确认后才执行。",
        "熟悉规则、投放目标和安全上限后，再考虑切换“全托管”。开启 Agent 总开关本身只会进入盯盘等待，不会立即修改计划。"
      ]
    },
    {
      title: "二、规则与智能协作",
      paragraphs: [
        "插件不提供“投放技能”或“AI 智能模式”开关。没有新需求时，Agent 按固定规则运行；当你在 Agent 总控（AI）、微信、飞书或小程序提出分析、数据格式、个人习惯或调控需求时，总控会自动进行智能理解并交给对应子 Agent。",
        "有自身投放经验时，可直接向总控说明目标、阈值、例外条件、审核习惯和汇报格式。总控只会在现有规则与安全边界内补充执行；人工确认、全托管授权和高风险拦截仍然有效。"
      ]
    },
    {
      title: "三、AI 用量与计费",
      paragraphs: [
        "插件端的固定规则巡检、页面可见数据采集、定时数据通知，以及能够唯一识别的本地操作不会调用模型，不产生 AI 模型费用。",
        "与 Agent 总控进行自然语言对话、理解复杂需求、整理或新增规则、页面结构异常时的智能规划、识图兜底，以及临时切换模型，都可能调用一次或多次模型。相关用量按实际模型调用从 AI 钱包结算，失败请求按账单规则退回；具体以页面价格说明和 AI 钱包账单为准。",
        "人工确认只决定调控是否执行，不会免除已经发生的模型调用。建议写清账户、投放场景、完整计划 ID、当前值、目标值和限制条件，减少额外理解与校验调用。"
      ]
    }
  ];

  function mount(root) {
    const dialog = root.querySelector(".mmw-qca-usage-notice-dialog");
    const content = dialog?.querySelector("[data-usage-notice-content]");
    const closeButtons = dialog ? [...dialog.querySelectorAll("[data-usage-notice-close]")] : [];
    if (!dialog || !content || !closeButtons.length) return null;

    content.replaceChildren(...SECTIONS.map((section) => {
      const block = document.createElement("section");
      const heading = document.createElement("h3");
      heading.textContent = section.title;
      block.append(heading, ...section.paragraphs.map((text) => {
        const paragraph = document.createElement("p");
        paragraph.textContent = text;
        return paragraph;
      }));
      return block;
    }));
    dialog.querySelector("[data-usage-notice-version]").textContent = `版本 ${VERSION} · 更新日期 ${UPDATED_AT}`;

    let firstPromptOpen = false;
    let checkedThisSession = false;

    function readSeen() {
      return new Promise((resolve) => {
        const storage = globalThis.chrome?.storage?.local;
        if (!storage?.get) {
          resolve(false);
          return;
        }
        try {
          storage.get([SEEN_STORAGE_KEY], (values) => {
            if (globalThis.chrome?.runtime?.lastError) {
              resolve(false);
              return;
            }
            resolve(values?.[SEEN_STORAGE_KEY] === true);
          });
        } catch {
          resolve(false);
        }
      });
    }

    function markSeen() {
      const storage = globalThis.chrome?.storage?.local;
      if (!storage?.set) return;
      try {
        storage.set({ [SEEN_STORAGE_KEY]: true }, () => void globalThis.chrome?.runtime?.lastError);
      } catch {}
    }

    function close() {
      if (dialog.open) dialog.close();
      if (firstPromptOpen) {
        firstPromptOpen = false;
        markSeen();
      }
    }

    function open(trigger = "manual") {
      dialog.querySelector("[data-usage-notice-trigger]").textContent =
        `你正在${TRIGGER_LABELS[trigger] || "使用千川 Agent"}，请先了解以下使用方式。`;
      if (!dialog.open) dialog.showModal();
    }

    async function openOnce() {
      if (checkedThisSession) return false;
      checkedThisSession = true;
      if (await readSeen()) return false;
      firstPromptOpen = true;
      open("first_open");
      return true;
    }

    root.querySelector("[data-usage-notice-open]")?.addEventListener("click", () => open("manual"));
    closeButtons.forEach((button) => button.addEventListener("click", close));
    dialog.addEventListener("cancel", (event) => {
      event.preventDefault();
      close();
    });
    return { open, openOnce, close };
  }

  const api = { VERSION, UPDATED_AT, SEEN_STORAGE_KEY, SECTIONS, mount };
  if (typeof window !== "undefined") window.MMWQianchuanUsageNotice = api;
  if (typeof module !== "undefined" && module.exports) module.exports = api;
})();
