// Portal A.2 — Marketing dashboard
function PortalAMarketing() {
  const s = YJ.useStore();
  const toast = useToast();
  const [view, setView] = useState("traffic");
  const [showCouponModal, setShowCouponModal] = useState(false);
  const [showPushModal, setShowPushModal] = useState(false);
  const [showCampaignModal, setShowCampaignModal] = useState(false);

  const utmRows = useMemo(() => {
    const map = {};
    s.orders.forEach(o => {
      if (!o.brokerId) return;
      map[o.brokerId] = map[o.brokerId] || { clicks: 0, carts: 0, orders: 0, gmv: 0 };
      map[o.brokerId].orders += 1;
      map[o.brokerId].gmv += o.amount;
    });
    // Synthesise clicks + carts from orders (3-5% conv rate)
    return Object.entries(map).map(([brokerId, m]) => {
      const broker = s.brokers.find(b => b.id === brokerId);
      const clicks = Math.round(m.orders * (25 + Math.random() * 18));
      const carts = Math.round(m.orders * (3.5 + Math.random() * 1.4));
      return { broker, clicks, carts, orders: m.orders, gmv: m.gmv, conv: (m.orders / clicks * 100) };
    }).sort((a, b) => b.gmv - a.gmv);
  }, [s.orders, s.brokers]);

  const totalClicks = utmRows.reduce((a, r) => a + r.clicks, 0);
  const totalCarts = utmRows.reduce((a, r) => a + r.carts, 0);
  const totalOrders = utmRows.reduce((a, r) => a + r.orders, 0);
  const totalGMV = utmRows.reduce((a, r) => a + r.gmv, 0);

  return (
    <div>
      <div className="page-head">
        <div>
          <h1>ฝ่ายการตลาด — Conversion & Campaigns</h1>
          <div className="sub">วิเคราะห์ Traffic / UTM, สร้างคูปอง Push และวัด ROI</div>
        </div>
        <div style={{ display: "flex", gap: 8 }}>
          <button className="neu-btn" onClick={() => setShowCampaignModal(true)}>+ สร้างแคมเปญใหม่</button>
          <button className="neu-btn primary" onClick={() => setShowCouponModal(true)}>+ สร้างคูปอง</button>
        </div>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "220px 1fr", gap: 24 }}>
        <SubTabs value={view} onChange={setView} items={[
          { id: "traffic", label: "Traffic & Conversion", ico: "TR" },
          { id: "utm", label: "UTM Broker Tracking", ico: "UT" },
          { id: "campaign", label: "Campaigns & Push", ico: "CM" },
          { id: "roi", label: "Marketing ROI", ico: "RO" },
        ]} />

        <div style={{ display: "grid", gap: 18 }}>
          {view === "traffic" && (
            <>
              <Section title="Conversion Funnel — ลิงก์นายหน้า ➜ ตะกร้า ➜ สั่งซื้อ">
                <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 14 }}>
                  {[
                    { label: "คลิกลิงก์นายหน้า", value: totalClicks, color: "#7b61ff" },
                    { label: "ใส่ตะกร้า", value: totalCarts, color: "var(--accent)" },
                    { label: "สั่งซื้อสำเร็จ", value: totalOrders, color: "var(--ok)" },
                  ].map((step, i, arr) => (
                    <div key={step.label} style={{ padding: 22, borderRadius: 18, background: step.color, color: "#fff", position: "relative", overflow: "hidden" }}>
                      <div style={{ fontSize: 11, opacity: .85, textTransform: "uppercase", letterSpacing: ".08em" }}>STEP {i + 1}</div>
                      <div style={{ fontSize: 14, marginTop: 6, opacity: .95 }}>{step.label}</div>
                      <div className="mono" style={{ fontSize: 30, fontWeight: 700, marginTop: 6 }}>{fmtNum(step.value)}</div>
                      {i > 0 && (
                        <div style={{ fontSize: 12, marginTop: 6, opacity: .85 }}>
                          → {((step.value / arr[i - 1].value) * 100).toFixed(1)}% จาก STEP {i}
                        </div>
                      )}
                    </div>
                  ))}
                </div>
                <div style={{ marginTop: 22, padding: 16, borderRadius: 14, boxShadow: "var(--neu-in-sm)", display: "flex", justifyContent: "space-between", alignItems: "center" }}>
                  <div style={{ display: "flex", gap: 22 }}>
                    <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>Click → Cart</div><div className="mono" style={{ fontWeight: 700 }}>{((totalCarts / Math.max(1, totalClicks)) * 100).toFixed(1)}%</div></div>
                    <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>Cart → Order</div><div className="mono" style={{ fontWeight: 700 }}>{((totalOrders / Math.max(1, totalCarts)) * 100).toFixed(1)}%</div></div>
                    <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>End-to-end</div><div className="mono" style={{ fontWeight: 700, color: "var(--accent)" }}>{((totalOrders / Math.max(1, totalClicks)) * 100).toFixed(1)}%</div></div>
                  </div>
                  <span className="pill">เทียบกับ industry 1.8% — ดีกว่า</span>
                </div>
              </Section>

              <Section title="Conversion ตามช่องทาง" sub="คลิกแยกตามแพลตฟอร์มต้นทาง">
                <div style={{ display: "grid", gap: 12 }}>
                  {[
                    { src: "Facebook", clicks: 4820, orders: 142 },
                    { src: "TikTok", clicks: 3210, orders: 98 },
                    { src: "LINE OA", clicks: 1820, orders: 76 },
                    { src: "Instagram", clicks: 980, orders: 28 },
                    { src: "Direct / Other", clicks: 540, orders: 12 },
                  ].map(r => (
                    <div key={r.src} style={{ display: "grid", gridTemplateColumns: "120px 1fr 100px 80px", gap: 12, alignItems: "center", fontSize: 13 }}>
                      <div>{r.src}</div>
                      <div className="bar-track"><div className="bar-fill" style={{ width: (r.clicks / 4820 * 100) + "%" }}></div></div>
                      <div className="mono" style={{ textAlign: "right" }}>{fmtNum(r.clicks)} clicks</div>
                      <div className="mono" style={{ textAlign: "right", color: "var(--accent)", fontWeight: 600 }}>{(r.orders / r.clicks * 100).toFixed(1)}%</div>
                    </div>
                  ))}
                </div>
              </Section>
            </>
          )}

          {view === "utm" && (
            <Section title="UTM Tracking — นายหน้าที่ส่งคนเข้ามามากสุด" sub="วัด traffic, cart, order และ conversion rate รายคน">
              <table className="neu-table">
                <thead><tr><th>นายหน้า</th><th>Clicks</th><th>Add to Cart</th><th>Orders</th><th>GMV</th><th>Conv.</th><th>UTM Link</th></tr></thead>
                <tbody>
                  {utmRows.map(r => (
                    <tr key={r.broker.id}>
                      <td>
                        <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
                          <div style={{ width: 28, height: 28, borderRadius: 8, background: "var(--accent-soft)", color: "var(--accent)", display: "grid", placeItems: "center", fontWeight: 600 }}>{r.broker.avatar}</div>
                          <div>
                            <div style={{ fontWeight: 500 }}>{r.broker.name}</div>
                            <div style={{ fontSize: 11, color: "var(--ink-3)" }}>Lv {r.broker.level}</div>
                          </div>
                        </div>
                      </td>
                      <td className="mono">{fmtNum(r.clicks)}</td>
                      <td className="mono">{fmtNum(r.carts)}</td>
                      <td className="mono">{fmtNum(r.orders)}</td>
                      <td className="mono" style={{ fontWeight: 600 }}>{fmtTHB(r.gmv)}</td>
                      <td><span className="pill ok">{r.conv.toFixed(1)}%</span></td>
                      <td><span className="mono" style={{ fontSize: 11, color: "var(--ink-3)" }}>yjm.co/r/{r.broker.id}</span></td>
                    </tr>
                  ))}
                </tbody>
              </table>
            </Section>
          )}

          {view === "campaign" && (
            <>
              <Section title="แคมเปญที่กำลังรัน" right={<button className="neu-btn sm primary" onClick={() => setShowCampaignModal(true)}>+ ใหม่</button>}>
                <div style={{ display: "grid", gap: 12 }}>
                  {s.campaigns.map(c => (
                    <div key={c.id} style={{ padding: 16, borderRadius: 14, boxShadow: "var(--neu-in-sm)", display: "grid", gridTemplateColumns: "1fr 120px 120px 120px 90px", gap: 14, alignItems: "center" }}>
                      <div>
                        <div style={{ fontWeight: 600 }}>{c.name}</div>
                        <div style={{ fontSize: 11, color: "var(--ink-3)" }}>{c.channel} · เริ่ม {fmtDate(c.startsAt)}</div>
                      </div>
                      <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>งบ</div><div className="mono">{fmtTHB(c.budget)}</div></div>
                      <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>ใช้แล้ว</div><div className="mono">{fmtTHB(c.spent)}</div></div>
                      <div><div style={{ fontSize: 11, color: "var(--ink-3)" }}>GMV ที่ได้</div><div className="mono" style={{ color: "var(--ok)", fontWeight: 600 }}>{fmtTHB(c.gmv)}</div></div>
                      <span className="pill ok">{(c.gmv / Math.max(1, c.spent)).toFixed(1)}x ROAS</span>
                    </div>
                  ))}
                </div>
              </Section>

              <div className="grid cols-2">
                <Section title="คูปองที่ใช้งานอยู่" right={<button className="neu-btn sm primary" onClick={() => setShowCouponModal(true)}>+ สร้าง</button>}>
                  <div style={{ display: "grid", gap: 10 }}>
                    {s.coupons.map(c => (
                      <div key={c.id} style={{ padding: 14, borderRadius: 14, boxShadow: "var(--neu-in-sm)", display: "flex", justifyContent: "space-between", alignItems: "center" }}>
                        <div>
                          <div className="mono" style={{ fontWeight: 700, color: "var(--accent)" }}>{c.code}</div>
                          <div style={{ fontSize: 12, color: "var(--ink-2)", marginTop: 2 }}>{c.desc}</div>
                          <div style={{ fontSize: 11, color: "var(--ink-3)", marginTop: 2 }}>Scope: {c.scope === "telesales" ? "Telesales เท่านั้น" : "ลูกค้าทั่วไป"}</div>
                        </div>
                        <div style={{ textAlign: "right" }}>
                          <div className="mono" style={{ fontWeight: 700, fontSize: 18 }}>-{fmtTHB(c.value)}</div>
                          <div style={{ fontSize: 11, color: "var(--ink-3)" }}>{c.used}/{c.limit} ใช้แล้ว</div>
                        </div>
                      </div>
                    ))}
                  </div>
                </Section>

                <Section title="Push Notification หานายหน้า" right={<button className="neu-btn sm primary" onClick={() => setShowPushModal(true)}>+ ส่งใหม่</button>}>
                  <div style={{ display: "grid", gap: 10 }}>
                    {s.pushLog.map(n => (
                      <div key={n.id} style={{ padding: 14, borderRadius: 14, boxShadow: "var(--neu-in-sm)" }}>
                        <div style={{ fontWeight: 600, fontSize: 13 }}>{n.title}</div>
                        <div style={{ fontSize: 12, color: "var(--ink-2)", marginTop: 2 }}>{n.body}</div>
                        <div style={{ fontSize: 11, color: "var(--ink-3)", marginTop: 6, display: "flex", justifyContent: "space-between" }}>
                          <span>{fmtRelTime(n.sentAt)}</span>
                          <span>ถึง {fmtNum(n.reach)} คน</span>
                        </div>
                      </div>
                    ))}
                  </div>
                </Section>
              </div>
            </>
          )}

          {view === "roi" && (
            <>
              <div className="grid cols-3">
                <Stat label="งบการตลาดที่ใช้" value={fmtTHB(s.campaigns.reduce((a, c) => a + c.spent, 0))} />
                <Stat label="GMV ที่เกิดจากแคมเปญ" value={fmtTHB(s.campaigns.reduce((a, c) => a + c.gmv, 0))} />
                <Stat
                  label="ROAS"
                  value={(s.campaigns.reduce((a, c) => a + c.gmv, 0) / Math.max(1, s.campaigns.reduce((a, c) => a + c.spent, 0))).toFixed(2) + "x"}
                  accent
                />
              </div>

              <Section title="Spend vs GMV รายแคมเปญ">
                <div style={{ display: "grid", gap: 12 }}>
                  {s.campaigns.map(c => (
                    <div key={c.id}>
                      <div style={{ display: "flex", justifyContent: "space-between", fontSize: 13, marginBottom: 4 }}>
                        <span style={{ fontWeight: 500 }}>{c.name}</span>
                        <span className="mono">{(c.gmv / Math.max(1, c.spent)).toFixed(2)}x</span>
                      </div>
                      <div style={{ display: "grid", gridTemplateColumns: `${(c.spent / (c.spent + c.gmv)) * 100}% ${(c.gmv / (c.spent + c.gmv)) * 100}%`, gap: 0, height: 24, borderRadius: 12, overflow: "hidden", boxShadow: "var(--neu-in-sm)" }}>
                        <div style={{ background: "#e35062" }} title={"Spend " + fmtTHB(c.spent)}></div>
                        <div style={{ background: "var(--ok)" }} title={"GMV " + fmtTHB(c.gmv)}></div>
                      </div>
                      <div style={{ display: "flex", justifyContent: "space-between", fontSize: 11, color: "var(--ink-3)", marginTop: 4 }}>
                        <span>Spend {fmtTHB(c.spent)}</span><span>GMV {fmtTHB(c.gmv)}</span>
                      </div>
                    </div>
                  ))}
                </div>
              </Section>
            </>
          )}
        </div>
      </div>

      <CouponModal open={showCouponModal} onClose={() => setShowCouponModal(false)} onSubmit={(c) => {
        YJ.actions.addCoupon(c);
        toast.push("สร้างคูปอง " + c.code + " เรียบร้อย");
        setShowCouponModal(false);
      }} />
      <PushModal open={showPushModal} onClose={() => setShowPushModal(false)} onSubmit={(p) => {
        YJ.actions.sendPush(p);
        toast.push("ส่ง Push แล้ว ถึง " + fmtNum(s.brokers.length) + " คน");
        setShowPushModal(false);
      }} />
      <CampaignModal open={showCampaignModal} onClose={() => setShowCampaignModal(false)} onSubmit={(c) => {
        YJ.actions.addCampaign(c);
        toast.push("สร้างแคมเปญ " + c.name);
        setShowCampaignModal(false);
      }} />
    </div>
  );
}

function CouponModal({ open, onClose, onSubmit }) {
  const [code, setCode] = useState("");
  const [desc, setDesc] = useState("");
  const [value, setValue] = useState(50);
  const [limit, setLimit] = useState(100);
  const [scope, setScope] = useState("telesales");
  useEffect(() => { if (open) { setCode("YJ-" + Math.random().toString(36).slice(2, 7).toUpperCase()); setDesc(""); setValue(50); setLimit(100); setScope("telesales"); } }, [open]);
  return (
    <Modal open={open} onClose={onClose} title="สร้างคูปองส่วนลด"
      footer={<>
        <button className="neu-btn ghost" onClick={onClose}>ยกเลิก</button>
        <button className="neu-btn primary" onClick={() => onSubmit({ code, desc, value, limit, scope })} disabled={!code || !desc}>สร้างคูปอง</button>
      </>}
    >
      <div style={{ display: "grid", gap: 14 }}>
        <Field label="โค้ดคูปอง"><input className="neu-input mono" value={code} onChange={e => setCode(e.target.value.toUpperCase())} /></Field>
        <Field label="คำอธิบาย"><input className="neu-input" value={desc} onChange={e => setDesc(e.target.value)} placeholder="เช่น ส่วนลด Telesales 100฿" /></Field>
        <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 14 }}>
          <Field label="ส่วนลด (บาท)"><NumberInput value={value} onChange={setValue} /></Field>
          <Field label="จำนวนสิทธิ์"><NumberInput value={limit} onChange={setLimit} /></Field>
        </div>
        <Field label="ใช้กับ">
          <div style={{ display: "flex", gap: 6, padding: 4, borderRadius: 12, boxShadow: "var(--neu-in-sm)" }}>
            {[["telesales", "Telesales เท่านั้น (On-top)"], ["customer", "ลูกค้าทั่วไป"]].map(([k, l]) => (
              <button key={k} className={"neu-btn sm " + (scope === k ? "primary" : "ghost")} style={{ flex: 1 }} onClick={() => setScope(k)}>{l}</button>
            ))}
          </div>
        </Field>
      </div>
    </Modal>
  );
}

function PushModal({ open, onClose, onSubmit }) {
  const [title, setTitle] = useState(""); const [body, setBody] = useState("");
  useEffect(() => { if (open) { setTitle(""); setBody(""); } }, [open]);
  return (
    <Modal open={open} onClose={onClose} title="ส่ง Push Notification หานายหน้า"
      footer={<>
        <button className="neu-btn ghost" onClick={onClose}>ยกเลิก</button>
        <button className="neu-btn primary" onClick={() => onSubmit({ title, body })} disabled={!title}>ส่ง Push</button>
      </>}
    >
      <div style={{ display: "grid", gap: 14 }}>
        <Field label="หัวข้อ"><input className="neu-input" value={title} onChange={e => setTitle(e.target.value)} placeholder="เช่น โปรใหม่ Glow Beauty +15% Commission" /></Field>
        <Field label="ข้อความ"><textarea className="neu-input" rows={4} value={body} onChange={e => setBody(e.target.value)} placeholder="รายละเอียดโปรโมชั่น..." /></Field>
        <div style={{ padding: 14, borderRadius: 14, boxShadow: "var(--neu-in-sm)" }}>
          <div style={{ fontSize: 11, color: "var(--ink-3)", marginBottom: 4 }}>Preview บนมือถือนายหน้า</div>
          <div style={{ padding: 12, background: "var(--bg-2)", borderRadius: 10 }}>
            <div style={{ fontWeight: 600, fontSize: 13 }}>{title || "หัวข้อ..."}</div>
            <div style={{ fontSize: 12, color: "var(--ink-2)", marginTop: 4 }}>{body || "ข้อความ..."}</div>
          </div>
        </div>
      </div>
    </Modal>
  );
}

function CampaignModal({ open, onClose, onSubmit }) {
  const [name, setName] = useState(""); const [budget, setBudget] = useState(20000); const [channel, setChannel] = useState("Facebook");
  useEffect(() => { if (open) { setName(""); setBudget(20000); setChannel("Facebook"); } }, [open]);
  return (
    <Modal open={open} onClose={onClose} title="สร้างแคมเปญการตลาด"
      footer={<>
        <button className="neu-btn ghost" onClick={onClose}>ยกเลิก</button>
        <button className="neu-btn primary" onClick={() => onSubmit({ name, budget, channel })} disabled={!name}>สร้างแคมเปญ</button>
      </>}
    >
      <div style={{ display: "grid", gap: 14 }}>
        <Field label="ชื่อแคมเปญ"><input className="neu-input" value={name} onChange={e => setName(e.target.value)} placeholder="เช่น End of Month Push" /></Field>
        <Field label="งบ"><NumberInput value={budget} onChange={setBudget} prefix="฿" /></Field>
        <Field label="ช่องทาง">
          <select className="neu-input" value={channel} onChange={e => setChannel(e.target.value)}>
            <option>Facebook</option><option>TikTok</option><option>LINE OA</option><option>Instagram</option><option>Affiliate Push</option>
          </select>
        </Field>
      </div>
    </Modal>
  );
}

function Field({ label, children }) {
  return (<label style={{ display: "block" }}>
    <div style={{ fontSize: 12, color: "var(--ink-2)", marginBottom: 6, fontWeight: 500 }}>{label}</div>
    {children}
  </label>);
}

Object.assign(window, { PortalAMarketing, Field });
