/* ============================================================
   AfricaMart Admin — Disputes & Analytics
   ============================================================ */

/* ---------- Disputes & reports ---------- */
function DisputesModule({ disputes, setDispute, toast, confirm, search }) {
  const { Card, Badge, Btn, SectionHeader, TabBar, KPICard } = window.ModernTilesDesignSystem_50dd07;
  const [filter, setFilter] = aUseState("Open");
  const money = window.ADM.money;

  let rows = disputes.filter(d => !search || (d.id + d.summary + d.type).toLowerCase().includes(search.toLowerCase()));
  if (filter === "Open") rows = rows.filter(d => d.status === "open" || d.status === "investigating");
  else if (filter === "Resolved") rows = rows.filter(d => d.status === "resolved");

  const open = disputes.filter(d => d.status === "open" || d.status === "investigating").length;
  const atRisk = disputes.filter(d => d.status !== "resolved").reduce((s, d) => s + d.amount, 0);

  const PRIO = { high: ["#B91C1C", "#FEF2F2"], medium: ["#A05C08", "#FEF3E2"], low: ["#5C534C", "#F2EDE8"] };

  return React.createElement("div", null,
    React.createElement(SectionHeader, { title: "Disputes & reports", subtitle: open + " active cases needing resolution" }),
    React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(3,minmax(0,1fr))", gap: 14, marginBottom: 16 } },
      React.createElement(KPICard, { label: "Open cases", value: open, accent: true }),
      React.createElement(KPICard, { label: "Value at risk", value: money(atRisk, true) }),
      React.createElement(KPICard, { label: "Dispute rate", value: window.ADM.KPIS.disputeRate + "%" })),
    React.createElement(TabBar, { tabs: ["Open", "Resolved", "All"], active: filter, onChange: setFilter }),
    React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 12 } },
      rows.map(d => {
        const [pc, pbg] = PRIO[d.priority];
        return React.createElement(Card, { key: d.id },
          React.createElement("div", { style: { padding: "16px 18px" } },
            React.createElement("div", { style: { display: "flex", alignItems: "center", gap: 8, flexWrap: "wrap", marginBottom: 8 } },
              React.createElement("span", { style: { fontFamily: "'JetBrains Mono',monospace", fontSize: 12, fontWeight: 600, color: "#6B6158" } }, d.id),
              React.createElement(Badge, { status: "neutral", label: d.type }),
              React.createElement("span", { style: { fontSize: 11, fontWeight: 700, color: pc, background: pbg, padding: "2px 8px", borderRadius: 100, textTransform: "capitalize" } }, d.priority + " priority"),
              React.createElement(Badge, { status: STATUS_BADGE[d.status], label: d.status }),
              React.createElement("span", { style: { marginLeft: "auto", fontFamily: "'JetBrains Mono',monospace", fontSize: 13, fontWeight: 700, color: "#1A1614" } }, money(d.amount))),
            React.createElement("div", { style: { fontSize: 13, color: "#2A2420", lineHeight: 1.5 } }, d.summary),
            React.createElement("div", { style: { display: "flex", alignItems: "center", gap: 8, marginTop: 11, flexWrap: "wrap" } },
              React.createElement("span", { style: { fontSize: 11.5, color: "#A09288" } }, "Order " + d.order + " · " + (window.ADM.buyerById[d.buyer] || {}).name + " vs " + (window.AM.supplierById[d.supplier] || {}).name + " · opened " + d.opened),
              d.status !== "resolved" && React.createElement("div", { style: { display: "flex", gap: 8, marginLeft: "auto" } },
                React.createElement(Btn, { variant: "muted", size: "sm", onClick: () => { setDispute(d.id, "investigating"); toast("Marked as investigating"); } }, "Investigate"),
                React.createElement(Btn, { variant: "outline", size: "sm", onClick: () => toast("Refund issued to buyer") }, "Refund buyer"),
                React.createElement(Btn, { variant: "success", size: "sm", onClick: () => confirm({ title: "Resolve " + d.id + "?", body: "Mark this dispute as resolved. Both parties will be notified of the outcome.", confirmLabel: "Resolve", icon: "check", onConfirm: () => { setDispute(d.id, "resolved"); toast("Dispute resolved"); } }) }, "Resolve")))));
      })));
}

/* ---------- Full analytics ---------- */
function AnalyticsModule({ toast }) {
  const { Card, CardHeader, Badge, Btn, SectionHeader, KPICard } = window.ModernTilesDesignSystem_50dd07;
  const ADM = window.ADM, money = ADM.money;
  const wk = [...ADM.WEEKS].reverse();
  const maxCountry = Math.max(...ADM.GMV_BY_COUNTRY.map(c => c.value));

  return React.createElement("div", null,
    React.createElement(SectionHeader, { title: "Analytics", subtitle: "Marketplace performance · trailing 12 weeks" },
      React.createElement(Btn, { variant: "muted", size: "md", onClick: () => toast("Dashboard exported to PDF") }, React.createElement(AdmIcon, { name: "download", size: 14 }), "Export"),
      React.createElement(Btn, { variant: "primary", size: "md", onClick: () => toast("Scheduled weekly report") }, React.createElement(AdmIcon, { name: "clock", size: 14 }), "Schedule report")),

    React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(4,minmax(0,1fr))", gap: 14, marginBottom: 16 } },
      React.createElement(KPICard, { label: "Quarter GMV", value: "$16.5M", delta: "18.4%", deltaPos: true, accent: true }),
      React.createElement(KPICard, { label: "Orders / week", value: "297", delta: "9.2%", deltaPos: true }),
      React.createElement(KPICard, { label: "New accounts / wk", value: "118", delta: "15.7%", deltaPos: true }),
      React.createElement(KPICard, { label: "Repeat rate", value: "55%", delta: "2.1%", deltaPos: true })),

    // Trends
    React.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 14, marginBottom: 14 } },
      React.createElement(Card, null,
        React.createElement(CardHeader, { title: "Orders per week" }),
        React.createElement("div", { style: { padding: "16px 18px 12px" } }, React.createElement(BarChart, { data: [...ADM.ORDERS_SERIES], labels: wk, color: "#447892", height: 160 }))),
      React.createElement(Card, null,
        React.createElement(CardHeader, { title: "New account signups" }),
        React.createElement("div", { style: { padding: "16px 18px 12px" } }, React.createElement(LineChart, { data: [...ADM.SIGNUP_SERIES], labels: wk, color: "#1A6B45", fill: "rgba(26,107,69,.1)", height: 160 })))),

    // Geo + funnel
    React.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 14, marginBottom: 14 } },
      React.createElement(Card, null,
        React.createElement(CardHeader, { title: "GMV by country", action: React.createElement(Badge, { status: "info", label: "12 markets" }) }),
        React.createElement("div", { style: { padding: "14px 18px 16px", display: "flex", flexDirection: "column", gap: 11 } },
          ADM.GMV_BY_COUNTRY.map(c => React.createElement("div", { key: c.code, style: { display: "flex", alignItems: "center", gap: 10 } },
            React.createElement(AdmFlag, { code: c.code, size: 16 }),
            React.createElement("span", { style: { width: 96, fontSize: 12.5, color: "#2A2420", flexShrink: 0 } }, c.name),
            React.createElement("div", { style: { flex: 1 } }, React.createElement(Bar, { pct: (c.value / maxCountry) * 100, color: "#447892", h: 8 })),
            React.createElement("span", { style: { fontFamily: "'JetBrains Mono',monospace", fontSize: 11.5, fontWeight: 600, color: "#1A1614", width: 44, textAlign: "right" } }, "$" + c.value + "M"))))),
      React.createElement(Card, null,
        React.createElement(CardHeader, { title: "Conversion funnel" }),
        React.createElement("div", { style: { padding: "16px 18px" } },
          ADM.FUNNEL.map((f, i) => {
            const pct = (f.value / ADM.FUNNEL[0].value) * 100;
            const conv = i === 0 ? 100 : (f.value / ADM.FUNNEL[i - 1].value) * 100;
            return React.createElement("div", { key: f.stage, style: { marginBottom: 13 } },
              React.createElement("div", { style: { display: "flex", justifyContent: "space-between", fontSize: 12.5, marginBottom: 4 } },
                React.createElement("span", { style: { color: "#2A2420", fontWeight: 500 } }, f.stage),
                React.createElement("span", { style: { color: "#1A1614", fontWeight: 600, fontFamily: "'JetBrains Mono',monospace" } }, f.value.toLocaleString(), i > 0 && React.createElement("span", { style: { color: "#A09288", fontWeight: 500, marginLeft: 6 } }, conv.toFixed(0) + "%"))),
              React.createElement("div", { style: { background: "#F0EBE5", borderRadius: 6, height: 22, overflow: "hidden" } },
                React.createElement("div", { style: { width: pct + "%", height: "100%", background: "linear-gradient(90deg,#2A4E62,#447892)", borderRadius: 6, transition: "width .5s var(--ease-out,ease)" } })));
          })))),

    // Top suppliers
    React.createElement(Card, null,
      React.createElement(CardHeader, { title: "Top suppliers by GMV", action: React.createElement(Btn, { variant: "ghost", size: "sm", onClick: () => toast("Full leaderboard exported") }, "Export") }),
      React.createElement("div", { style: { padding: "8px 18px 14px" } },
        Object.entries(ADM.SUPPLIER_ADMIN).sort((a, b) => b[1].gmv - a[1].gmv).slice(0, 5).map(([id, sa], i) => {
          const s = window.AM.supplierById[id];
          const max = Math.max(...Object.values(ADM.SUPPLIER_ADMIN).map(x => x.gmv));
          return React.createElement("div", { key: id, style: { display: "flex", alignItems: "center", gap: 12, padding: "9px 0", borderBottom: "1px solid #F7F4F0" } },
            React.createElement("span", { style: { fontFamily: "'Outfit',sans-serif", fontSize: 13, fontWeight: 700, color: "#A09288", width: 18 } }, "#" + (i + 1)),
            React.createElement(Avatar, { name: s.name, size: 30, color: s.color || "#2A4E62" }),
            React.createElement("div", { style: { width: 200, minWidth: 0 } },
              React.createElement("div", { style: { fontSize: 12.5, fontWeight: 600, color: "#1A1614", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } }, s.name),
              React.createElement("div", { style: { fontSize: 11, color: "#A09288", display: "flex", alignItems: "center", gap: 4 } }, React.createElement(AdmFlag, { code: s.country, size: 11 }), sa.orders + " orders")),
            React.createElement("div", { style: { flex: 1 } }, React.createElement(Bar, { pct: (sa.gmv / max) * 100, color: "#C5622C", h: 7 })),
            React.createElement("span", { style: { fontFamily: "'JetBrains Mono',monospace", fontSize: 12, fontWeight: 600, color: "#1A1614", width: 56, textAlign: "right" } }, money(sa.gmv, true)));
        }))));
}

Object.assign(window, { DisputesModule, AnalyticsModule });
