import { Schema } from "effect";
import { Expression } from "../../../../../share/expression.js";
import { Triggers } from "../../../../../share/event-bus.js";
import { Locale } from "../../../../../share/locale.js";
import { md } from "../../../../../share/markdown.js";
export const type = "com.shwfed.actions.button.http.request.json.batch";
export const compatibilityDate = "2026-06-08";
export const metadata = {
  name: "\u6279\u91CF\u8BF7\u6C42",
  icon: "fluent:cloud-arrow-up-20-regular"
};
const isHttpRequestList = (t) => t === "dyn" || t === "list" || t === "list<dyn>" || t === "list<HttpRequest>";
export function schema(configure) {
  const CelHttpRequestList = Expression({ configure, resultType: isHttpRequestList });
  const CelMessage = Expression({
    configure: (env) => {
      configure(env);
      env.registerVariable("jsons", "list<dyn>", {
        description: "HTTP \u54CD\u5E94\u4F53\u5217\u8868\uFF08\u5DF2\u89E3\u6790 JSON\uFF0C\u4EC5\u6210\u529F\u9879\uFF0C\u6309\u53D1\u9001\u987A\u5E8F\uFF09"
      });
    },
    resultType: "string"
  });
  const CelResult = Expression({
    configure: (env) => {
      configure(env);
      env.registerVariable("json", "dyn", {
        description: "HTTP \u54CD\u5E94\u4F53\uFF08\u5DF2\u89E3\u6790 JSON\uFF09\uFF0C\u5F53\u524D\u8FD9\u4E00\u6761\u54CD\u5E94"
      });
    },
    resultType: "bool"
  });
  return Schema.Struct({
    type: Schema.Literal(type),
    compatibilityDate: Schema.Literal(compatibilityDate),
    expression: CelHttpRequestList.annotations({
      title: "\u8BF7\u6C42\u5217\u8868",
      description: md`
        点击后将立即被求值，返回一个 \`HttpRequest\` 列表。调度器将按列表顺序逐个发起请求，
        并在弹窗中显示进度。
      `
    }),
    before: Schema.optional(Triggers.annotations({
      title: "\u8BF7\u6C42\u524D",
      description: md`
        整批请求发起前按列表顺序执行的操作。任一操作中止（例如表单校验未通过）将取消本次批量请求。

        放在表单里的提交按钮应在此处首先触发所在表单的「校验」操作，使校验成为显式的提交前步骤。
      `
    })),
    markdown: Schema.optional(Locale.annotations({
      title: "\u8FDB\u5EA6\u4FE1\u606F",
      description: md`
        进度弹窗内显示的信息，支持 \`{{ expression }}\` 插值。可用变量：
        \`total\`（请求总数）、\`succeeded\`（成功数）、\`failure\`（失败数）。

        例：\`已处理 {{ succeeded + failure }} / {{ total }}\`。不配置则弹窗只显示进度条。
      `
    })),
    continueOnError: Schema.optional(Schema.Boolean.annotations({
      title: "\u5931\u8D25\u65F6\u7EE7\u7EED",
      description: md`
        开启后，单个请求失败不会中断整批 —— 失败项被跳过，继续发起后续请求。
        缺省（关闭）时，遇到第一个失败即终止整批。
      `
    })),
    messageExpression: Schema.optional(CelMessage.annotations({
      title: "\u6D88\u606F",
      description: md`
        整批完成后对成功响应体列表 \`jsons\` 求值，返回 \`string\`，作为 toast 显示。
        无失败时为成功样式，否则为错误样式。不配置则不显示。
      `
    })),
    resultExpression: Schema.optional(CelResult.annotations({
      title: "\u6267\u884C\u7ED3\u679C",
      description: md`
        对**每一条**响应体 \`json\` 求值，返回 \`bool\` —— \`true\` 视为该条成功、\`false\` 视为失败。
        不配置时，任何未报错的响应都视为成功。

        失败会计入进度信息的 \`failure\`，并在未开启「失败时继续」时终止整批。
      `
    }))
  }).annotations({
    title: "HttpRequestBatchAction",
    description: "\u70B9\u51FB\u540E\u9010\u4E2A\u53D1\u8D77\u4E00\u6279 HTTP \u8BF7\u6C42\uFF0C\u5E76\u663E\u793A\u8FDB\u5EA6\u5F39\u7A97"
  });
}
