export const ACTION_RUNTIME = String.raw`
(function () {
  if (window.__wrnexusActionsInstalled) return;
  window.__wrnexusActionsInstalled = true;

  function csrf() {
    var match = document.cookie.match(/(?:^|;\s*)wire-csrf=([^;]+)/);
    return match ? decodeURIComponent(match[1]) : "";
  }

  function detail(form, name, extra) {
    return Object.assign({ form: form, name: name }, extra || {});
  }

  function emit(form, phase, name, extra, cancelable) {
    return form.dispatchEvent(new CustomEvent("wrnexus:action:" + phase, {
      bubbles: true,
      cancelable: !!cancelable,
      detail: detail(form, name, extra),
    }));
  }

  document.addEventListener("submit", function (event) {
    var form = event.target && event.target.closest && event.target.closest("form[data-wrn-action]");
    if (!form || event.defaultPrevented) return;
    var name = form.getAttribute("data-wrn-action");
    if (!name) return;
    event.preventDefault();
    var data = new FormData(form);
    data.set("_wrnexus_action", name);
    data.set("_csrf", csrf());
    emit(form, "optimistic", name, { input: data }, true);
    form.setAttribute("aria-busy", "true");
    form.setAttribute("data-wrn-action-state", "pending");
    emit(form, "pending", name, { input: data });
    fetch(form.action || location.href, {
      method: "POST",
      body: data,
      credentials: "same-origin",
      headers: { accept: "application/json", "x-wrnexus-action": name, "x-csrf-token": csrf() },
    }).then(async function (response) {
      var payload;
      try { payload = await response.json(); } catch (_) { payload = { error: await response.text() }; }
      if (!response.ok) throw Object.assign(new Error(payload.error || "Action failed"), { response: response, payload: payload });
      form.setAttribute("data-wrn-action-state", "success");
      emit(form, "success", name, { data: payload.data, invalidated: payload.invalidated || [] });
      if (payload.invalidated && payload.invalidated.length) {
        window.dispatchEvent(new CustomEvent("wrnexus:cache:invalidate", { detail: { tags: payload.invalidated } }));
      }
    }).catch(function (error) {
      form.setAttribute("data-wrn-action-state", "error");
      emit(form, "error", name, { error: error, errors: error.payload && error.payload.errors });
    }).finally(function () {
      form.removeAttribute("aria-busy");
    });
  });
})();
`;
