/* ============================================================
   AfricaMart Admin — Listings, RFQs, Orders
   ============================================================ */

/* ---------- Listings moderation ---------- */
function ListingsModule({ listings, setListing, toast, confirm, search }) {
  const { Card, DataTable, Badge, Btn, SectionHeader, TabBar } = window.ModernTilesDesignSystem_50dd07;
  const [filter, setFilter] = aUseState("All");
  const money = window.ADM.money;

  let rows = listings.filter(l => !search || l.name.toLowerCase().includes(search.toLowerCase()));
  if (filter === "Pending") rows = rows.filter(l => l.status === "pending");
  else if (filter === "Flagged") rows = rows.filter(l => l.status === "flagged");
  else if (filter === "Live") rows = rows.filter(l => l.status === "live");

  const cols = [
    { key: "name", label: "Listing", render: (v, r) => React.createElement("div", null,
      React.createElement("div", { style: { fontSize: 13, fontWeight: 600, color: "#1A1614", display: "flex", alignItems: "center", gap: 6 } }, v,
        r.flags > 0 && React.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: 3, fontSize: 10.5, color: "#B91C1C", background: "#FEF2F2", padding: "1px 6px", borderRadius: 100, fontWeight: 700 } }, React.createElement(AdmIcon, { name: "flag", size: 10 }), r.flags)),
      React.createElement("div", { style: { fontSize: 11.5, color: "#857870", marginTop: 2 } }, (window.AM.supplierById[r.supplier] || {}).name + " · " + (window.AM.catById[r.cat] || {}).name)) },
    { key: "price", label: "Price", align: "right", mono: true, nowrap: true, render: v => money(v, true) },
    { key: "views", label: "Views", align: "right", mono: true, nowrap: true, render: v => v.toLocaleString() },
    { key: "status", label: "Status", render: v => React.createElement(Badge, { status: STATUS_BADGE[v], label: v }) },
    { key: "_a", label: "", align: "right", render: (_, r) => React.createElement("div", { style: { display: "flex", gap: 6, justifyContent: "flex-end" } },
      r.status === "pending" && React.createElement(Btn, { variant: "success", size: "sm", onClick: e => { e.stopPropagation(); setListing(r.id, "live"); toast("Listing approved & published"); } }, "Approve"),
      r.status === "flagged" && React.createElement(Btn, { variant: "danger", size: "sm", onClick: e => { e.stopPropagation(); confirm({ danger: true, title: "Remove listing?", body: '"' + r.name + '" will be taken down and the supplier notified.', confirmLabel: "Take down", icon: "trash", onConfirm: () => { setListing(r.id, "removed"); toast("Listing removed", true); } }); } }, "Take down"),
      React.createElement(Btn, { variant: "muted", size: "sm", onClick: e => { e.stopPropagation(); toast("Opening listing preview"); } }, "Review")) },
  ];

  const pending = listings.filter(l => l.status === "pending").length;
  const flagged = listings.filter(l => l.status === "flagged").length;

  return React.createElement("div", null,
    React.createElement(SectionHeader, { title: "Listings", subtitle: pending + " pending approval · " + flagged + " flagged by buyers" }),
    React.createElement(TabBar, { tabs: ["All", "Pending", "Flagged", "Live"], active: filter, onChange: setFilter }),
    React.createElement(Card, null, React.createElement(DataTable, { columns: cols, rows })),
    rows.length === 0 && React.createElement("div", { style: { textAlign: "center", padding: "40px 0", color: "#A09288", fontSize: 13 } }, "Nothing in this queue. "));
}

/* ---------- RFQ monitoring ---------- */
function RfqModule({ toast, search }) {
  const { Card, DataTable, Badge, Btn, SectionHeader } = window.ModernTilesDesignSystem_50dd07;
  let rows = window.AM.RFQS.filter(r => !search || r.title.toLowerCase().includes(search.toLowerCase()));
  const cols = [
    { key: "title", label: "RFQ", render: (v, r) => React.createElement("div", null,
      React.createElement("div", { style: { fontSize: 13, fontWeight: 600, color: "#1A1614", maxWidth: 320, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } }, v),
      React.createElement("div", { style: { fontSize: 11.5, color: "#857870", marginTop: 2, display: "flex", alignItems: "center", gap: 5 } }, React.createElement(AdmFlag, { code: r.country, size: 12 }), r.buyer)) },
    { key: "qty", label: "Quantity", mono: true, nowrap: true },
    { key: "quotes", label: "Quotes", align: "center", render: v => React.createElement("span", { style: { display: "inline-flex", alignItems: "center", justifyContent: "center", minWidth: 24, height: 22, padding: "0 7px", borderRadius: 100, background: v >= 8 ? "#EDFAF3" : v >= 4 ? "#EFF4FF" : "#FEF3E2", color: v >= 8 ? "#1A6B45" : v >= 4 ? "#1750A0" : "#A05C08", fontSize: 12, fontWeight: 700 } }, v) },
    { key: "deadline", label: "Deadline", nowrap: true, muted: true },
    { key: "posted", label: "Posted", muted: true, nowrap: true },
    { key: "status", label: "Status", render: v => React.createElement(Badge, { status: STATUS_BADGE[v], label: v }) },
    { key: "_a", label: "", align: "right", render: (_, r) => React.createElement(Btn, { variant: "ghost", size: "sm", onClick: () => toast("Opening RFQ " + r.id) }, "Inspect") },
  ];
  return React.createElement("div", null,
    React.createElement(SectionHeader, { title: "RFQ monitoring", subtitle: rows.length + " open requests · " + rows.reduce((s, r) => s + r.quotes, 0) + " supplier quotes" },
      React.createElement(Btn, { variant: "muted", size: "md", onClick: () => toast("RFQ data exported") }, React.createElement(AdmIcon, { name: "download", size: 14 }), "Export")),
    React.createElement(Card, null, React.createElement(DataTable, { columns: cols, rows })));
}

/* ---------- Orders / transactions ---------- */
function OrdersModule({ orders, toast, search }) {
  const { Card, DataTable, Badge, Btn, SectionHeader, TabBar, KPICard } = window.ModernTilesDesignSystem_50dd07;
  const [filter, setFilter] = aUseState("All");
  const money = window.ADM.money;

  let rows = orders.filter(o => !search || (o.id + o.product).toLowerCase().includes(search.toLowerCase()));
  if (filter === "In progress") rows = rows.filter(o => ["in transit", "processing", "pending payment"].includes(o.status));
  else if (filter === "Completed") rows = rows.filter(o => o.status === "completed");
  else if (filter === "Disputed") rows = rows.filter(o => o.status === "disputed");

  const gmv = orders.reduce((s, o) => s + (o.status === "cancelled" ? 0 : o.value), 0);
  const commission = orders.reduce((s, o) => s + o.commission, 0);
  const disputed = orders.filter(o => o.status === "disputed").length;

  const cols = [
    { key: "id", label: "Order", mono: true, nowrap: true, render: v => React.createElement("span", { style: { fontWeight: 600, color: "#1A1614" } }, v) },
    { key: "product", label: "Item", render: (v, r) => React.createElement("div", null,
      React.createElement("div", { style: { fontSize: 12.5, color: "#2A2420", maxWidth: 220, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } }, v),
      React.createElement("div", { style: { fontSize: 11, color: "#A09288", marginTop: 1 } }, (window.ADM.buyerById[r.buyer] || {}).name + " ← " + (window.AM.supplierById[r.supplier] || {}).name)) },
    { key: "value", label: "Value", align: "right", mono: true, nowrap: true, render: v => money(v) },
    { key: "commission", label: "Fee", align: "right", mono: true, nowrap: true, render: v => money(v) },
    { key: "incoterm", label: "Terms", muted: true, nowrap: true },
    { key: "status", label: "Status", render: v => React.createElement(Badge, { status: STATUS_BADGE[v], label: v }) },
  ];

  return React.createElement("div", null,
    React.createElement(SectionHeader, { title: "Orders & transactions", subtitle: orders.length + " orders shown" },
      React.createElement(Btn, { variant: "muted", size: "md", onClick: () => toast("Transaction ledger exported") }, React.createElement(AdmIcon, { name: "download", size: 14 }), "Export ledger")),
    React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(3,minmax(0,1fr))", gap: 14, marginBottom: 16 } },
      React.createElement(KPICard, { label: "Transaction volume", value: money(gmv, true), accent: true }),
      React.createElement(KPICard, { label: "Commission earned", value: money(commission) }),
      React.createElement(KPICard, { label: "Disputed orders", value: disputed })),
    React.createElement(TabBar, { tabs: ["All", "In progress", "Completed", "Disputed"], active: filter, onChange: setFilter }),
    React.createElement(Card, null, React.createElement(DataTable, { columns: cols, rows })));
}

Object.assign(window, { ListingsModule, RfqModule, OrdersModule });
