// pages/admin.jsx — admin panel: dashboard, students, batches, recordings, payments

const { useState: useS_ADM } = React;

function AdminShell({ go, current, isLoggedIn, setTweak, children }) {
  if (!isLoggedIn) return (
    <div style={{ minHeight: "100vh", display: "flex", alignItems: "center", justifyContent: "center", background: "var(--paper)" }}>
      <div className="card" style={{ maxWidth: 420, textAlign: "center", padding: 40 }}>
        <div style={{ width: 64, height: 64, borderRadius: "50%", background: "var(--blue-50)", color: "var(--blue)", display: "inline-flex", alignItems: "center", justifyContent: "center", marginBottom: 20 }}>
          <Icon name="shield" size={26}/>
        </div>
        <h3>Admin access only</h3>
        <p className="muted" style={{ marginTop: 8 }}>Log in with an admin account to manage students, batches, recordings, and payments.</p>
        <div className="row gap-12" style={{ justifyContent: "center", marginTop: 24 }}>
          <button className="btn btn-primary" onClick={() => go("/login")}>Log in</button>
          <button className="btn btn-secondary" onClick={() => setTweak("authState", "logged_in")}>Use Tweak: log me in</button>
        </div>
      </div>
    </div>
  );

  return (
    <div className="shell-with-sidebar">
      <aside className="sidebar" style={{ background: "var(--ink)", borderRightColor: "transparent" }}>
        <div style={{ padding: "0 6px 12px" }}>
          <div className="row center gap-12">
            <span style={{ width: 32, height: 32, borderRadius: 8, background: "#fff", color: "var(--blue)", display: "inline-flex", alignItems: "center", justifyContent: "center", fontFamily: "var(--font-mono)", fontWeight: 700, fontSize: 13 }}>{"</>"}</span>
            <div>
              <div style={{ color: "#fff", fontWeight: 700, fontSize: 15, letterSpacing: "-0.01em" }}>Computer-tution</div>
              <div style={{ color: "rgba(255,255,255,.5)", fontSize: 11, fontFamily: "var(--font-mono)", letterSpacing: "0.08em", textTransform: "uppercase" }}>Admin</div>
            </div>
          </div>
        </div>
        <div style={{ height: 12 }}/>
        <AdminLink active={current === "home"}       onClick={() => go("/admin")}            icon="chart"       label="Overview" />
        <AdminLink active={current === "students"}   onClick={() => go("/admin/students")}   icon="users"       label="Students" />
        <AdminLink active={current === "batches"}    onClick={() => go("/admin/batches")}    icon="layers"      label="Batches" />
        <AdminLink active={current === "recordings"} onClick={() => go("/admin/recordings")} icon="video"       label="Recordings" />
        <AdminLink active={current === "payments"}   onClick={() => go("/admin/payments")}   icon="credit-card" label="Payments" />

        <div className="sidebar-foot">
          <button className="nav-link" style={{ color: "rgba(255,255,255,.6)" }} onClick={() => go("/dashboard")}>
            <Icon name="external" size={14}/> Switch to student view
          </button>
          <button className="nav-link" style={{ color: "rgba(255,255,255,.6)" }} onClick={() => { setTweak("authState", "logged_out"); go("/"); }}>
            <Icon name="logout" size={14}/> Log out
          </button>
        </div>
        <style>{`
          .sidebar .nav-link { color: rgba(255,255,255,.65); }
          .sidebar .nav-link:hover { background: rgba(255,255,255,.06); color: #fff; }
          .sidebar .nav-link.active { background: rgba(255,255,255,.1); color: #fff; }
        `}</style>
      </aside>
      <main className="main-area">{children}</main>
    </div>
  );
}

const AdminLink = ({ active, onClick, icon, label }) => (
  <button className={`nav-link ${active ? "active" : ""}`} onClick={onClick}>
    <Icon name={icon} size={16}/> {label}
  </button>
);

// ───── Admin home ────────────────────────────────────────────
function AdminDashboard({ go, isLoggedIn, setTweak }) {
  return (
    <AdminShell go={go} current="home" isLoggedIn={isLoggedIn} setTweak={setTweak}>
      <div className="page-head">
        <div>
          <div className="eyebrow">Overview · Aug 2025</div>
          <h2 style={{ marginTop: 8 }}>Operations dashboard</h2>
        </div>
        <div className="row gap-12">
          <button className="btn btn-secondary btn-sm"><Icon name="calendar" size={14}/> This month</button>
          <button className="btn btn-primary btn-sm" onClick={() => go("/admin/recordings")}><Icon name="upload" size={14}/> Upload recording</button>
        </div>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 16, marginBottom: 32 }}>
        <StatTile label="Total students"      value={420} suffix="" delta="+12 this month" />
        <StatTile label="Active enrolments"   value={84}  suffix=""  delta="+8 vs Jul" />
        <StatTile label="Revenue, Aug"        value={151200} prefix="₹" delta="+₹14,400" />
        <StatTile label="Recordings uploaded" value={62}  suffix=""  delta="+9 this week" />
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 24 }}>
        <div className="card" style={{ padding: 0, overflow: "hidden" }}>
          <div className="row between center" style={{ padding: "20px 24px", borderBottom: "1px solid var(--line-2)" }}>
            <h3>Recent enrolments</h3>
            <button className="btn btn-ghost btn-sm" onClick={() => go("/admin/students")}>All students <Icon name="arrow-right" size={14}/></button>
          </div>
          <table className="tbl">
            <thead><tr><th>Student</th><th>Batch</th><th>Date</th></tr></thead>
            <tbody>
              {ADMIN_STUDENTS.slice(0, 5).map((s) => (
                <tr key={s.email}>
                  <td>
                    <div style={{ fontWeight: 600 }}>{s.name}</div>
                    <div style={{ fontSize: 12, color: "var(--ink-3)" }}>{s.email}</div>
                  </td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>{s.batch}</td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--ink-3)" }}>Aug 12</td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>

        <div className="card" style={{ padding: 0, overflow: "hidden" }}>
          <div className="row between center" style={{ padding: "20px 24px", borderBottom: "1px solid var(--line-2)" }}>
            <h3>Recent payments</h3>
            <button className="btn btn-ghost btn-sm" onClick={() => go("/admin/payments")}>All payments <Icon name="arrow-right" size={14}/></button>
          </div>
          <table className="tbl">
            <thead><tr><th>Student</th><th>Amount</th><th>Status</th><th>Date</th></tr></thead>
            <tbody>
              {ADMIN_PAYMENTS.slice(0, 5).map((p) => (
                <tr key={p.rzp}>
                  <td style={{ fontWeight: 500 }}>{p.name}</td>
                  <td style={{ fontFamily: "var(--font-mono)", fontWeight: 600 }}>₹{p.amount.toLocaleString("en-IN")}</td>
                  <td><PaymentStatus s={p.status}/></td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--ink-3)" }}>{p.date}</td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>
      </div>
    </AdminShell>
  );
}

const StatTile = ({ label, value, prefix = "", suffix = "", delta }) => (
  <div className="card" style={{ padding: 24 }}>
    <div style={{ fontSize: 12, color: "var(--ink-3)", fontFamily: "var(--font-mono)", letterSpacing: "0.06em", textTransform: "uppercase" }}>{label}</div>
    <div style={{ fontFamily: "var(--font-mono)", fontSize: 36, fontWeight: 600, color: "var(--ink)", marginTop: 12, letterSpacing: "-0.02em" }}>
      {prefix}<Counter value={value}/>{suffix}
    </div>
    {delta && <div style={{ fontSize: 12, color: "var(--green)", marginTop: 6, fontWeight: 500 }}>↑ {delta}</div>}
  </div>
);

const PaymentStatus = ({ s }) => {
  if (s === "paid")    return <span className="pill pill-green pill-dot">Paid</span>;
  if (s === "failed")  return <span className="pill pill-red pill-dot">Failed</span>;
  if (s === "created") return <span className="pill pill-gray pill-dot">Created</span>;
  return <span className="pill pill-gray">{s}</span>;
};

const EnrolStatus = ({ s }) => {
  if (s === "active")  return <span className="pill pill-green pill-dot">Active</span>;
  if (s === "expired") return <span className="pill pill-amber pill-dot">Expired</span>;
  if (s === "pending") return <span className="pill pill-gray pill-dot">Pending</span>;
  return <span className="pill pill-gray">{s}</span>;
};

// ───── Students ──────────────────────────────────────────────
function AdminStudents({ go, isLoggedIn, setTweak }) {
  const [batch, setBatch] = useS_ADM("all");
  const [cls,   setCls]   = useS_ADM("all");
  const [q,     setQ]     = useS_ADM("");

  const filtered = ADMIN_STUDENTS.filter(s =>
    (batch === "all" || s.batch === batch) &&
    (cls === "all" || s.cls === cls) &&
    (!q || s.name.toLowerCase().includes(q.toLowerCase()) || s.email.toLowerCase().includes(q.toLowerCase()))
  );

  return (
    <AdminShell go={go} current="students" isLoggedIn={isLoggedIn} setTweak={setTweak}>
      <div className="page-head">
        <div>
          <div className="eyebrow">Students</div>
          <h2 style={{ marginTop: 8 }}>All students</h2>
          <p className="muted" style={{ marginTop: 6 }}>{filtered.length} of {ADMIN_STUDENTS.length} students</p>
        </div>
        <div className="row gap-12">
          <button className="btn btn-secondary btn-sm"><Icon name="download" size={14}/> Export CSV</button>
        </div>
      </div>

      <div className="card" style={{ padding: 16, marginBottom: 16 }}>
        <div className="row gap-12 center" style={{ flexWrap: "wrap" }}>
          <div style={{ position: "relative", flex: 1, minWidth: 240 }}>
            <Icon name="search" size={14} style={{ position: "absolute", left: 12, top: "50%", transform: "translateY(-50%)", color: "var(--ink-3)" }}/>
            <input className="input" placeholder="Search by name or email…" value={q} onChange={e => setQ(e.target.value)} style={{ paddingLeft: 36 }} />
          </div>
          <select className="select" value={cls} onChange={e => setCls(e.target.value)} style={{ width: 160 }}>
            <option value="all">All classes</option>
            <option value="10">Class 10 (ICSE)</option>
            <option value="12">Class 12 (ISC)</option>
          </select>
          <select className="select" value={batch} onChange={e => setBatch(e.target.value)} style={{ width: 200 }}>
            <option value="all">All batches</option>
            {ADMIN_BATCHES.map(b => <option key={b.name} value={b.name}>{b.name}</option>)}
          </select>
        </div>
      </div>

      <div className="card" style={{ padding: 0, overflow: "hidden" }}>
        <table className="tbl">
          <thead>
            <tr>
              <th>Student</th>
              <th>Class · Board</th>
              <th>Batch</th>
              <th>Status</th>
              <th>Contact</th>
              <th style={{ width: 32 }}></th>
            </tr>
          </thead>
          <tbody>
            {filtered.map((s) => (
              <tr key={s.email} style={{ cursor: "pointer" }}>
                <td>
                  <div className="row center gap-12">
                    <image-slot id={`std-${s.email}`} placeholder="" shape="circle" style={{ width: 32, height: 32, flexShrink: 0 }}></image-slot>
                    <div>
                      <div style={{ fontWeight: 600 }}>{s.name}</div>
                      <div style={{ fontSize: 12, color: "var(--ink-3)" }}>{s.email}</div>
                    </div>
                  </div>
                </td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>CS-{s.cls} · {s.board}</td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>{s.batch}</td>
                <td><EnrolStatus s={s.status}/></td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 12, color: "var(--ink-3)" }}>{s.phone}</td>
                <td><Icon name="chevron-right" size={14} /></td>
              </tr>
            ))}
          </tbody>
        </table>
        {filtered.length === 0 && (
          <div style={{ padding: 64, textAlign: "center", color: "var(--ink-3)" }}>
            <Icon name="search" size={28}/>
            <div style={{ marginTop: 12, fontWeight: 600, color: "var(--ink)" }}>No students match those filters</div>
            <p style={{ marginTop: 6, fontSize: 14 }}>Try clearing the search or selecting a different batch.</p>
          </div>
        )}
      </div>
    </AdminShell>
  );
}

// ───── Batches ───────────────────────────────────────────────
function AdminBatches({ go, isLoggedIn, setTweak }) {
  const [editing, setEditing] = useS_ADM(null); // batch name being edited
  const [createOpen, setCreateOpen] = useS_ADM(false);

  return (
    <AdminShell go={go} current="batches" isLoggedIn={isLoggedIn} setTweak={setTweak}>
      <div className="page-head">
        <div>
          <div className="eyebrow">Batches</div>
          <h2 style={{ marginTop: 8 }}>All batches</h2>
        </div>
        <button className="btn btn-primary btn-sm" onClick={() => setCreateOpen(true)}><Icon name="plus" size={14}/> New batch</button>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "repeat(2, 1fr)", gap: 16 }}>
        {ADMIN_BATCHES.map((b) => (
          <div key={b.name} className="card" style={{ padding: 24, opacity: b.active ? 1 : 0.7 }}>
            <div className="row between" style={{ alignItems: "flex-start" }}>
              <div>
                <div style={{ fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--ink-3)", letterSpacing: "0.08em", textTransform: "uppercase" }}>{b.course}</div>
                <h3 style={{ marginTop: 8 }}>{b.name}</h3>
              </div>
              {b.active ? <span className="pill pill-green pill-dot">Active</span> : <span className="pill pill-gray pill-dot">Inactive</span>}
            </div>

            <div style={{ marginTop: 20, display: "grid", gridTemplateColumns: "1fr 1fr", gap: 16 }}>
              <KV label="Start" value={b.start} />
              <KV label="Students" value={`${b.students} enrolled`} />
              <KV label="Schedule" value={b.schedule} />
              <KV label="Meet link" value={b.zoom.replace("https://", "")} mono />
            </div>

            <div className="row gap-8" style={{ marginTop: 20, paddingTop: 20, borderTop: "1px solid var(--line-2)" }}>
              <button className="btn btn-secondary btn-sm" onClick={() => setEditing(b.name)}><Icon name="edit" size={14}/> Edit</button>
              <button className="btn btn-ghost btn-sm">{b.active ? "Set inactive" : "Set active"}</button>
              <button className="btn btn-ghost btn-sm" style={{ marginLeft: "auto" }} onClick={() => go("/admin/recordings")}><Icon name="video" size={14}/> Recordings</button>
            </div>
          </div>
        ))}
      </div>

      {(createOpen || editing) && (
        <Modal onClose={() => { setCreateOpen(false); setEditing(null); }} title={editing ? `Edit ${editing}` : "Create new batch"}>
          <form className="col gap-16" onSubmit={(e) => { e.preventDefault(); setCreateOpen(false); setEditing(null); }}>
            <div className="row gap-12">
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Batch name</label>
                <input className="input" placeholder="ISC-XII Feb 2026" defaultValue={editing || ""} />
              </div>
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Course</label>
                <select className="select">
                  <option>ISC Class 12 — Computer Science</option>
                  <option>ICSE Class 10 — Computer Applications</option>
                </select>
              </div>
            </div>
            <div className="row gap-12">
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Start date</label>
                <input className="input" type="date" />
              </div>
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Schedule</label>
                <input className="input" placeholder="Mon, Thu • 7:00–8:30 PM" />
              </div>
            </div>
            <div className="field">
              <label className="field-label">Zoom / Meet link</label>
              <input className="input" placeholder="https://meet.google.com/…" />
            </div>
            <div className="row gap-12" style={{ marginTop: 8, justifyContent: "flex-end" }}>
              <button type="button" className="btn btn-ghost" onClick={() => { setCreateOpen(false); setEditing(null); }}>Cancel</button>
              <button type="submit" className="btn btn-primary">{editing ? "Save changes" : "Create batch"}</button>
            </div>
          </form>
        </Modal>
      )}
    </AdminShell>
  );
}

// ───── Recordings (admin upload) ─────────────────────────────
function AdminRecordings({ go, isLoggedIn, setTweak }) {
  const [batch, setBatch] = useS_ADM("ISC-XII Aug 2025");
  const [chapter, setChapter] = useS_ADM("Inheritance & Polymorphism");
  const [title, setTitle] = useS_ADM("");
  const [date, setDate] = useS_ADM("");
  const [duration, setDuration] = useS_ADM("");
  const [src, setSrc] = useS_ADM("upload"); // upload | embed
  const [embedUrl, setEmbedUrl] = useS_ADM("");
  const [uploading, setUploading] = useS_ADM(null); // null | "uploading" | "success" | "error"
  const [progress, setProgress] = useS_ADM(0);

  const startUpload = () => {
    setUploading("uploading");
    setProgress(0);
    const t = setInterval(() => {
      setProgress(p => {
        if (p >= 100) { clearInterval(t); setUploading("success"); return 100; }
        return p + Math.random() * 18;
      });
    }, 220);
  };

  return (
    <AdminShell go={go} current="recordings" isLoggedIn={isLoggedIn} setTweak={setTweak}>
      <div className="page-head">
        <div>
          <div className="eyebrow">Recordings</div>
          <h2 style={{ marginTop: 8 }}>Upload + manage</h2>
        </div>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "420px 1fr", gap: 24, alignItems: "flex-start" }}>
        <div className="card" style={{ padding: 28, position: "sticky", top: 40 }}>
          <h3>Upload recording</h3>
          <p className="muted" style={{ marginTop: 6, fontSize: 14 }}>Students in the selected batch will see it instantly.</p>

          <div className="col gap-12" style={{ marginTop: 24 }}>
            <div className="field">
              <label className="field-label">Batch</label>
              <select className="select" value={batch} onChange={e => setBatch(e.target.value)}>
                {ADMIN_BATCHES.map(b => <option key={b.name}>{b.name}</option>)}
              </select>
            </div>
            <div className="field">
              <label className="field-label">Chapter</label>
              <select className="select" value={chapter} onChange={e => setChapter(e.target.value)}>
                <optgroup label="ISC Class 12 — Computer Science">
                  <option>Object-Oriented Methodology in Java</option>
                  <option>Inheritance &amp; Polymorphism</option>
                  <option>Recursion</option>
                  <option>Arrays &amp; 2D Arrays</option>
                  <option>Data Structures: Stacks, Queues, Linked Lists</option>
                  <option>Complexity &amp; Sorting</option>
                </optgroup>
                <optgroup label="ICSE Class 10 — Computer Applications">
                  <option>Class as the Basis of All Computation</option>
                  <option>User-Defined Methods</option>
                  <option>Constructors</option>
                  <option>Library Classes &amp; Wrapper Classes</option>
                  <option>Encapsulation</option>
                  <option>Arrays &amp; String Handling</option>
                </optgroup>
              </select>
            </div>
            <div className="field">
              <label className="field-label">Title</label>
              <input className="input" placeholder="Inheritance — Live Class" value={title} onChange={e => setTitle(e.target.value)} />
            </div>
            <div className="row gap-12">
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Date recorded</label>
                <input className="input" type="date" value={date} onChange={e => setDate(e.target.value)} />
              </div>
              <div className="field" style={{ flex: 1 }}>
                <label className="field-label">Duration (min)</label>
                <input className="input" type="number" placeholder="90" value={duration} onChange={e => setDuration(e.target.value)} />
              </div>
            </div>

            <div className="tabs" style={{ alignSelf: "flex-start" }}>
              <button type="button" className={src === "upload" ? "active" : ""} onClick={() => setSrc("upload")}>Upload file</button>
              <button type="button" className={src === "embed"  ? "active" : ""} onClick={() => setSrc("embed")}>Embed link</button>
            </div>

            {src === "upload" ? (
              <div style={{ border: "1px dashed var(--line)", borderRadius: 12, padding: 24, textAlign: "center", color: "var(--ink-3)", background: "var(--paper)" }}>
                {uploading === null && <>
                  <Icon name="upload" size={24} />
                  <div style={{ marginTop: 8, fontWeight: 600, color: "var(--ink)" }}>Drop video file here</div>
                  <p style={{ marginTop: 6, fontSize: 13 }}>MP4 / WebM, up to 4 GB</p>
                  <button className="btn btn-secondary btn-sm" style={{ marginTop: 12 }} onClick={startUpload}>Browse files</button>
                </>}
                {uploading === "uploading" && <>
                  <div style={{ fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--ink)" }}>Uploading… {Math.round(progress)}%</div>
                  <div style={{ width: "100%", height: 6, background: "var(--line)", borderRadius: 3, marginTop: 12, overflow: "hidden" }}>
                    <div style={{ width: `${progress}%`, height: "100%", background: "var(--blue)", transition: "width .2s" }}/>
                  </div>
                  <p style={{ marginTop: 12, fontSize: 12 }}>oop-inheritance-final.mp4 · 842 MB</p>
                </>}
                {uploading === "success" && <>
                  <div style={{ color: "var(--green)" }}><Icon name="check" size={24} stroke={3}/></div>
                  <div style={{ marginTop: 8, fontWeight: 600, color: "var(--ink)" }}>Upload complete</div>
                  <p style={{ marginTop: 6, fontSize: 13 }}>Ready to publish to students.</p>
                </>}
              </div>
            ) : (
              <div className="field">
                <label className="field-label">YouTube / Drive embed link</label>
                <input className="input" placeholder="https://drive.google.com/file/d/…/view" value={embedUrl} onChange={e => setEmbedUrl(e.target.value)} />
                <div className="muted" style={{ fontSize: 12 }}>Paste a sharable link. Must be set to "Anyone with the link".</div>
              </div>
            )}

            <button className="btn btn-primary btn-block" style={{ marginTop: 8 }} disabled={uploading === "uploading"} onClick={(e) => { e.preventDefault(); if (uploading === "success" || src === "embed") { /* would persist */ } else if (src === "upload") { startUpload(); } }}>
              {uploading === "uploading" ? "Uploading…" : "Publish recording"}
            </button>
          </div>
        </div>

        <div className="card" style={{ padding: 0, overflow: "hidden" }}>
          <div className="row between center" style={{ padding: "20px 24px", borderBottom: "1px solid var(--line-2)" }}>
            <h3>All uploaded recordings</h3>
            <div className="row gap-8">
              <select className="select" style={{ height: 36, width: 200 }}>
                <option>All batches</option>
                {ADMIN_BATCHES.map(b => <option key={b.name}>{b.name}</option>)}
              </select>
            </div>
          </div>
          <table className="tbl">
            <thead>
              <tr>
                <th>Recording</th>
                <th>Batch</th>
                <th>Chapter</th>
                <th>Date</th>
                <th>Duration</th>
                <th style={{ width: 80 }}></th>
              </tr>
            </thead>
            <tbody>
              {RECORDINGS.map((r) => (
                <tr key={r.id}>
                  <td>
                    <div className="row center gap-12">
                      <div className="video-frame" style={{ width: 64, aspectRatio: "16/9", borderRadius: 6, flexShrink: 0 }}>
                        <Icon name="play" size={14}/>
                      </div>
                      <div style={{ fontWeight: 500 }}>{r.title}</div>
                    </div>
                  </td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>ISC-XII Aug 2025</td>
                  <td style={{ fontSize: 13 }}>{r.chapter}</td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--ink-3)" }}>{r.date}</td>
                  <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>{r.duration}</td>
                  <td>
                    <div className="row gap-4">
                      <button className="btn btn-ghost btn-sm" style={{ padding: 6, height: 28 }}><Icon name="edit" size={14}/></button>
                      <button className="btn btn-ghost btn-sm" style={{ padding: 6, height: 28, color: "var(--red)" }}><Icon name="trash" size={14}/></button>
                    </div>
                  </td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>
      </div>
    </AdminShell>
  );
}

// ───── Payments ──────────────────────────────────────────────
function AdminPayments({ go, isLoggedIn, setTweak }) {
  const [status, setStatus] = useS_ADM("all");
  const filtered = ADMIN_PAYMENTS.filter(p => status === "all" || p.status === status);
  const paidTotal = ADMIN_PAYMENTS.filter(p => p.status === "paid").reduce((s, p) => s + p.amount, 0);

  return (
    <AdminShell go={go} current="payments" isLoggedIn={isLoggedIn} setTweak={setTweak}>
      <div className="page-head">
        <div>
          <div className="eyebrow">Payments</div>
          <h2 style={{ marginTop: 8 }}>All transactions</h2>
        </div>
        <button className="btn btn-secondary btn-sm"><Icon name="download" size={14}/> Export CSV</button>
      </div>

      <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 16, marginBottom: 24 }}>
        <StatTile label="Paid (Aug)"   value={paidTotal} prefix="₹" />
        <StatTile label="Failed"       value={ADMIN_PAYMENTS.filter(p => p.status === "failed").length} suffix="" />
        <StatTile label="Pending"      value={ADMIN_PAYMENTS.filter(p => p.status === "created").length} suffix="" />
      </div>

      <div className="card" style={{ padding: 0, overflow: "hidden" }}>
        <div className="row between center" style={{ padding: "16px 24px", borderBottom: "1px solid var(--line-2)" }}>
          <div className="tabs">
            <button className={status === "all" ? "active" : ""}     onClick={() => setStatus("all")}>All · {ADMIN_PAYMENTS.length}</button>
            <button className={status === "paid" ? "active" : ""}    onClick={() => setStatus("paid")}>Paid · {ADMIN_PAYMENTS.filter(p => p.status === "paid").length}</button>
            <button className={status === "failed" ? "active" : ""}  onClick={() => setStatus("failed")}>Failed · {ADMIN_PAYMENTS.filter(p => p.status === "failed").length}</button>
            <button className={status === "created" ? "active" : ""} onClick={() => setStatus("created")}>Pending · {ADMIN_PAYMENTS.filter(p => p.status === "created").length}</button>
          </div>
        </div>
        <table className="tbl">
          <thead>
            <tr>
              <th>Student</th>
              <th>Batch</th>
              <th>Amount</th>
              <th>Razorpay ID</th>
              <th>Status</th>
              <th>Date</th>
            </tr>
          </thead>
          <tbody>
            {filtered.map((p) => (
              <tr key={p.rzp}>
                <td style={{ fontWeight: 500 }}>{p.name}</td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 13 }}>{p.batch}</td>
                <td style={{ fontFamily: "var(--font-mono)", fontWeight: 600 }}>₹{p.amount.toLocaleString("en-IN")}</td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 12, color: "var(--ink-3)" }}>{p.rzp}</td>
                <td><PaymentStatus s={p.status}/></td>
                <td style={{ fontFamily: "var(--font-mono)", fontSize: 13, color: "var(--ink-3)" }}>{p.date}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    </AdminShell>
  );
}

// ───── Modal ─────────────────────────────────────────────────
function Modal({ title, children, onClose }) {
  return (
    <div style={{ position: "fixed", inset: 0, background: "rgba(15,23,42,.4)", zIndex: 100, display: "flex", alignItems: "center", justifyContent: "center", padding: 24, animation: "fadein .15s ease" }}>
      <div className="card" style={{ width: "100%", maxWidth: 560, padding: 32, animation: "fadein .2s ease", background: "#fff" }}>
        <div className="row between center" style={{ marginBottom: 24 }}>
          <h3>{title}</h3>
          <button onClick={onClose} className="btn btn-ghost btn-sm" style={{ padding: 8, height: 32 }}><Icon name="x" size={16}/></button>
        </div>
        {children}
      </div>
    </div>
  );
}

Object.assign(window, {
  AdminDashboard, AdminStudents, AdminBatches, AdminRecordings, AdminPayments,
});
