// Themed confirm dialog. Usage:
//   KomonichiConfirm.ask({ title, body, confirmLabel, tone: 'warm' }).then(ok => ...)
// Returns a Promise<boolean>. Mounted to a singleton container so any code
// can call ask() without rendering its own modal.
(function () {
  const { useState } = React;

  let resolveCurrent = null;
  let setOpenCurrent = null;
  let setOptsCurrent = null;

  function ConfirmRoot() {
    const [open, setOpen] = useState(false);
    const [opts, setOpts] = useState({});
    setOpenCurrent = setOpen;
    setOptsCurrent = setOpts;

    function close(answer) {
      setOpen(false);
      if (resolveCurrent) { resolveCurrent(answer); resolveCurrent = null; }
    }

    if (!open) return null;
    return React.createElement("div", {
      className: "confirm-overlay",
      onClick: () => close(false),
    },
      React.createElement("div", {
        className: "confirm-card card",
        onClick: (e) => e.stopPropagation(),
      },
        opts.eyebrow ? React.createElement("div", { className: "label" }, opts.eyebrow) : null,
        React.createElement("h3", {
          className: "title",
          style: { fontSize: 24, lineHeight: 1.15, marginTop: 6 },
        }, opts.title || "Are you sure?"),
        opts.body
          ? React.createElement("p", {
              className: "haiku",
              style: { fontSize: 14, marginTop: 12 },
            }, opts.body)
          : null,
        React.createElement("div", {
          style: { display: "flex", gap: 10, justifyContent: "flex-end", marginTop: 22 },
        },
          React.createElement("button", {
            className: "btn ghost",
            onClick: () => close(false),
          }, opts.cancelLabel || "not yet"),
          React.createElement("button", {
            className: "btn " + (opts.tone || "warm"),
            onClick: () => close(true),
            autoFocus: true,
          }, opts.confirmLabel || "yes")
        )
      )
    );
  }

  function ask(options) {
    if (!setOpenCurrent) mount();
    return new Promise((resolve) => {
      resolveCurrent = resolve;
      setOptsCurrent(options || {});
      setOpenCurrent(true);
    });
  }

  function mount() {
    let host = document.getElementById("komonichi-confirm-host");
    if (!host) {
      host = document.createElement("div");
      host.id = "komonichi-confirm-host";
      document.body.appendChild(host);
    }
    ReactDOM.createRoot(host).render(React.createElement(ConfirmRoot));
  }

  // mount on script load so callers don't have to think about it
  mount();

  window.KomonichiConfirm = { ask };
})();
