/* FORGE · pump tenant — Work Order issue screen.
   Babel-standalone in-browser; NO ES imports / exports.
   Wrapped in IIFE; exposes ScreenWOIssue on window.

   Form fields: SKU (select from PUMP_TENANT.boms), qty (number),
   due_date (date), serial_prefix (text). On submit, calls
   window.forgeApi.wo.issue() which pushes a work order + auto-generates
   travelers (one per serial) onto PUMP_TENANT.

   Route registered as /build/wo-issue (mode=build).
*/
(function _initScreenWOIssue() {
  if (typeof window === "undefined") return;
  if (typeof React === "undefined") return;

  const { useState, useMemo, useEffect } = React;

  const _WI_FIELD_STYLE = {
    width: "100%", padding: "7px 10px",
    border: "1px solid var(--line)", background: "var(--bg-0)",
    color: "var(--ink)", borderRadius: 3, fontSize: 13,
    fontFamily: "var(--font-mono)",
  };
  const _WI_LABEL_WRAP = { display: "flex", flexDirection: "column", gap: 4, marginBottom: 12 };

  function ScreenWOIssue() {
    const tenant = (typeof useActiveTenant === "function") ? useActiveTenant() : (window.PUMP_TENANT || {});
    const boms = (tenant && tenant.boms) || [];
    const woCount = ((tenant && tenant.work_orders) || []).length;

    const [sku, setSku] = useState(boms[0] && boms[0].sku || "M-27418");
    const [qty, setQty] = useState(10);
    const [dueDate, setDueDate] = useState(function() {
      const d = new Date();
      d.setDate(d.getDate() + 30);
      return d.toISOString().slice(0, 10);
    });
    const [serialPrefix, setSerialPrefix] = useState("TPX-N");
    const [customer, setCustomer] = useState("Internal · pilot lot");
    const [busy, setBusy] = useState(false);
    const [lastIssued, setLastIssued] = useState(null);
    const [toast, setToast] = useState(null);

    const skuRow = boms.find(function(b) { return b.sku === sku; });
    const bomCount = (skuRow && skuRow.lines && skuRow.lines.length) || 0;

    function submit() {
      if (busy) return;
      if (!sku || !qty || qty < 1 || !serialPrefix.trim()) {
        setToast("Fill all fields · qty must be ≥ 1");
        setTimeout(function() { setToast(null); }, 2400);
        return;
      }
      setBusy(true);
      window.forgeApi.wo.issue({
        sku: sku,
        qty: Number(qty),
        due_date: dueDate,
        serial_prefix: serialPrefix.trim(),
        customer: customer,
        scheduled_start: new Date().toISOString().slice(0, 10),
      }).then(function(wo) {
        setBusy(false);
        setLastIssued(wo);
        setToast("Issued " + wo.id + " · " + qty + " serials");
        setTimeout(function() { setToast(null); }, 3000);
      }).catch(function(err) {
        setBusy(false);
        setToast("Failed: " + err.message);
        setTimeout(function() { setToast(null); }, 3000);
      });
    }

    return React.createElement(
      "div",
      { style: { display: "flex", flexDirection: "column", height: "100%", minHeight: 0 } },
      // Header
      React.createElement(
        "div",
        { style: { padding: "10px 14px", borderBottom: "1px solid var(--line)", background: "var(--bg-2)", display: "flex", justifyContent: "space-between", alignItems: "center" } },
        React.createElement("div", null,
          React.createElement("div", { style: { fontSize: 14, color: "var(--ink)", fontWeight: 500 } }, "Issue work order"),
          React.createElement("div", { className: "mono", style: { fontSize: 12, color: "var(--ink-4)", marginTop: 2 } },
            "Adds to " + (tenant && tenant.tenant && tenant.tenant.name || "tenant") + " · " + woCount + " existing WOs"
          )
        ),
        React.createElement("span", { className: "mono", style: { color: "var(--ink-3)", fontSize: 12 } }, "build://workorders/new")
      ),

      // Body
      React.createElement(
        "div",
        { style: { flex: 1, overflow: "auto", padding: 24, display: "grid", gridTemplateColumns: "1fr 1fr", gap: 24 } },

        // Left — form
        React.createElement(
          "div",
          { style: { maxWidth: 480 } },
          React.createElement("div", { className: "label", style: { marginBottom: 12 } }, "WORK ORDER FORM"),

          React.createElement(
            "div",
            { style: _WI_LABEL_WRAP },
            React.createElement("label", { className: "label", htmlFor: "wi-sku" }, "SKU"),
            React.createElement(
              "select",
              { id: "wi-sku", value: sku, onChange: function(e) { setSku(e.target.value); }, style: _WI_FIELD_STYLE },
              boms.map(function(b) {
                return React.createElement("option", { key: b.sku, value: b.sku }, b.sku + " · " + (b.lines.length) + " BOM lines");
              })
            )
          ),

          React.createElement(
            "div",
            { style: _WI_LABEL_WRAP },
            React.createElement("label", { className: "label", htmlFor: "wi-qty" }, "QUANTITY"),
            React.createElement("input", {
              id: "wi-qty",
              type: "number",
              min: 1,
              value: qty,
              onChange: function(e) { setQty(e.target.value); },
              style: _WI_FIELD_STYLE,
            })
          ),

          React.createElement(
            "div",
            { style: _WI_LABEL_WRAP },
            React.createElement("label", { className: "label", htmlFor: "wi-due" }, "DUE DATE"),
            React.createElement("input", {
              id: "wi-due",
              type: "date",
              value: dueDate,
              onChange: function(e) { setDueDate(e.target.value); },
              style: _WI_FIELD_STYLE,
            })
          ),

          React.createElement(
            "div",
            { style: _WI_LABEL_WRAP },
            React.createElement("label", { className: "label", htmlFor: "wi-prefix" }, "SERIAL PREFIX"),
            React.createElement("input", {
              id: "wi-prefix",
              type: "text",
              value: serialPrefix,
              onChange: function(e) { setSerialPrefix(e.target.value); },
              placeholder: "e.g. TPX-N",
              style: _WI_FIELD_STYLE,
            }),
            React.createElement("div", { className: "mono", style: { fontSize: 12, color: "var(--ink-4)", marginTop: 4 } },
              "Serials: " + serialPrefix + "-0001 … " + serialPrefix + "-" + String(qty).padStart(4, "0")
            )
          ),

          React.createElement(
            "div",
            { style: _WI_LABEL_WRAP },
            React.createElement("label", { className: "label", htmlFor: "wi-cust" }, "CUSTOMER"),
            React.createElement("input", {
              id: "wi-cust",
              type: "text",
              value: customer,
              onChange: function(e) { setCustomer(e.target.value); },
              style: _WI_FIELD_STYLE,
            })
          ),

          React.createElement(
            "div",
            { style: { marginTop: 16, display: "flex", gap: 8, justifyContent: "flex-end" } },
            React.createElement(window.Btn || "button", { onClick: function() {
              setSku(boms[0] && boms[0].sku || "M-27418");
              setQty(10);
              setSerialPrefix("TPX-N");
              setCustomer("Internal · pilot lot");
            } }, "Reset"),
            React.createElement(window.Btn || "button", { variant: "primary", icon: "Plus", onClick: submit },
              busy ? "Issuing…" : "Issue work order"
            )
          )
        ),

        // Right — preview
        React.createElement(
          "div",
          null,
          React.createElement("div", { className: "label", style: { marginBottom: 12 } }, "PREVIEW"),
          React.createElement(
            "div",
            { style: { border: "1px solid var(--line)", borderRadius: 4, background: "var(--bg-0)", padding: 14 } },
            React.createElement("div", { style: { fontSize: 13, color: "var(--ink)", marginBottom: 8 } }, "Work order summary"),
            React.createElement("div", { style: { display: "grid", gridTemplateColumns: "100px 1fr", rowGap: 5, fontSize: 12 } },
              React.createElement("span", { className: "label" }, "SKU"),
              React.createElement("span", { className: "mono", style: { color: "var(--ink-2)" } }, sku + " · " + bomCount + " BOM lines"),
              React.createElement("span", { className: "label" }, "Qty"),
              React.createElement("span", { className: "mono", style: { color: "var(--ink-2)" } }, String(qty)),
              React.createElement("span", { className: "label" }, "Due"),
              React.createElement("span", { className: "mono", style: { color: "var(--ink-2)" } }, dueDate),
              React.createElement("span", { className: "label" }, "Customer"),
              React.createElement("span", { style: { color: "var(--ink-2)", fontSize: 12 } }, customer),
              React.createElement("span", { className: "label" }, "Route"),
              React.createElement("span", { className: "mono", style: { color: "var(--ink-2)" } },
                ((tenant && tenant.routing) || []).map(function(r) { return r.id.toUpperCase(); }).join(" → ")
              )
            )
          ),

          lastIssued && React.createElement(
            "div",
            { style: { marginTop: 14, padding: 12, border: "1px solid var(--ok)", borderRadius: 4, background: "color-mix(in oklch, var(--ok) 6%, var(--bg-0))" } },
            React.createElement("div", { className: "label", style: { color: "var(--ok)", marginBottom: 4 } }, "ISSUED"),
            React.createElement("div", { className: "mono", style: { fontSize: 13, color: "var(--ink)" } }, lastIssued.id),
            React.createElement("div", { style: { fontSize: 12, color: "var(--ink-3)", marginTop: 6 } },
              lastIssued.qty + " serials generated with prefix " + lastIssued.serial_pool_prefix + " · queued at s1 receiving."
            )
          )
        )
      ),

      // Toast
      toast && React.createElement(
        "div",
        {
          style: {
            position: "fixed", bottom: 24, right: 24,
            background: "var(--ink)", color: "var(--bg-0)",
            padding: "8px 14px", borderRadius: 4, fontSize: 12,
            boxShadow: "0 6px 20px rgba(0,0,0,0.18)", zIndex: 60,
          },
        },
        toast
      )
    );
  }

  window.ScreenWOIssue = ScreenWOIssue;

  if (typeof window.registerPumpRoute === "function") {
    window.registerPumpRoute({
      path: "/build/wo-issue",
      mode: "build",
      title: "Issue work order",
      renderer: function() { return React.createElement(ScreenWOIssue); },
    });
  }
})();
