import { Schema } from "effect";
import { Expression } from "../../../../../share/expression.js";
import { Triggers } from "../../../../../share/event-bus.js";
import { md } from "../../../../../share/markdown.js";
export const type = "com.shwfed.actions.button.http.request.json";
export const compatibilityDate = "2026-04-18";
export const metadata = {
  name: "\u7F51\u7EDC\u8BF7\u6C42\uFF08JSON\uFF09",
  icon: "fluent:cloud-arrow-up-20-regular"
};
export function schema(configure) {
  const CelHttpRequest = Expression({ configure, resultType: "HttpRequest" });
  const CelMessage = Expression({
    configure: (env) => {
      configure(env);
      env.registerVariable("json", "dyn", {
        description: "HTTP \u54CD\u5E94\u4F53\uFF08\u5DF2\u89E3\u6790 JSON\uFF09"
      });
    },
    resultType: "string"
  });
  return Schema.Struct({
    type: Schema.Literal(type),
    compatibilityDate: Schema.Literal(compatibilityDate),
    expression: CelHttpRequest.annotations({
      title: "\u8BF7\u6C42",
      description: md`
        点击后将立即被求值，当 HTTP 请求被成功构造后，调度器将尽可能快地安排执行这个请求
      `
    }),
    before: Schema.optional(Triggers.annotations({
      title: "\u8BF7\u6C42\u524D",
      description: md`
        请求发起前按列表顺序执行的操作。任一操作中止（例如表单校验未通过）将取消本次请求。

        放在表单里的提交按钮应在此处首先触发所在表单的「校验」操作，使校验成为显式的提交前步骤。
      `
    })),
    messageExpression: Schema.optional(CelMessage.annotations({
      title: "\u6D88\u606F",
      description: md`
        在响应体解析为 JSON 后对其求值，返回 \`string\`，作为 toast 显示。
        不配置则不显示。
      `
    })),
    resultExpression: Schema.optional(CelMessage.annotations({
      title: "\u6267\u884C\u7ED3\u679C",
      description: md`
        在响应体解析为 JSON 后对其求值，返回 \`string\`。
        支持 \`'success' | 'warning' | 'error' | 'info'\`；其他值按 \`success\` 处理。不配置则按 \`success\` 处理。

        它同时决定 toast 的样式，以及请求完成后执行下方哪一组操作。
      `
    })),
    onSuccess: Schema.optional(Triggers.annotations({
      title: "\u6210\u529F",
      description: "\u300C\u6267\u884C\u7ED3\u679C\u300D\u4E3A `success` \u65F6\uFF0C\u8BF7\u6C42\u5B8C\u6210\u540E\u6267\u884C\u7684\u64CD\u4F5C"
    })),
    onWarning: Schema.optional(Triggers.annotations({
      title: "\u8B66\u544A",
      description: "\u300C\u6267\u884C\u7ED3\u679C\u300D\u4E3A `warning` \u65F6\uFF0C\u8BF7\u6C42\u5B8C\u6210\u540E\u6267\u884C\u7684\u64CD\u4F5C"
    })),
    onError: Schema.optional(Triggers.annotations({
      title: "\u9519\u8BEF",
      description: "\u300C\u6267\u884C\u7ED3\u679C\u300D\u4E3A `error` \u65F6\uFF0C\u8BF7\u6C42\u5B8C\u6210\u540E\u6267\u884C\u7684\u64CD\u4F5C"
    })),
    onInfo: Schema.optional(Triggers.annotations({
      title: "\u4FE1\u606F",
      description: "\u300C\u6267\u884C\u7ED3\u679C\u300D\u4E3A `info` \u65F6\uFF0C\u8BF7\u6C42\u5B8C\u6210\u540E\u6267\u884C\u7684\u64CD\u4F5C"
    }))
  }).annotations({
    title: "HttpRequestAction",
    description: "\u70B9\u51FB\u540E\u76F4\u63A5\u53D1\u8D77 HTTP \u8BF7\u6C42"
  });
}
