// Polished Projects screen — segmented, grouped, sparkline-rich

function Projects({ setScreen, setProject }){
  const [query, setQuery] = useState("");
  const [tier, setTier]   = useState("all");        // all | top | active | background | dormant
  const [provider, setProvider] = useState("all");  // all | anthropic | google ...
  const [sort, setSort]   = useState("spend");      // spend | requests | recent

  // Aggregate sparkline for header — sum daily across all projects (proportional)
  const headerSeries = DAILY.map(d => d.cost);

  let rows = [...PROJECTS];
  if (query) rows = rows.filter(p => p.name.toLowerCase().includes(query.toLowerCase()) || p.client.toLowerCase().includes(query.toLowerCase()));
  if (provider !== "all") rows = rows.filter(p => MODELS[p.primaryModel].provider === provider);

  // Tier classification
  function tierOf(p){
    if (p.spend >= 10) return "top";
    if (p.spend >= 0.5) return "active";
    if (p.spend >= 0.001) return "background";
    return "dormant";
  }
  if (tier !== "all") rows = rows.filter(p => tierOf(p) === tier);

  rows.sort((a,b) => {
    if (sort === "requests") return b.requests - a.requests;
    if (sort === "recent")   return parseInt(a.lastActive) - parseInt(b.lastActive);
    return b.spend - a.spend;
  });

  // Group by tier for display
  const groups = [
    { id:"top",        label:"Top spenders",      hint:">= £10 this period",   items: rows.filter(p => tierOf(p)==="top") },
    { id:"active",     label:"Active",            hint:"£0.50 – £10",          items: rows.filter(p => tierOf(p)==="active") },
    { id:"background", label:"Background",        hint:"under £0.50",          items: rows.filter(p => tierOf(p)==="background") },
    { id:"dormant",    label:"Dormant",           hint:"sub-cent / inactive",  items: rows.filter(p => tierOf(p)==="dormant") },
  ].filter(g => g.items.length > 0);

  return (
    <div data-screen-label="02 Projects" style={{ padding:"24px 28px 40px", maxWidth:1320, margin:"0 auto", display:"flex", flexDirection:"column", gap:20 }}>

      {/* ── Page header ───────────────────────────────────── */}
      <header style={{ display:"flex", alignItems:"flex-end", justifyContent:"space-between", gap:16 }}>
        <div>
          <div style={{ fontSize:11, letterSpacing:0.08, textTransform:"uppercase", color:"var(--fg-3)", fontWeight:600, marginBottom:6 }}>Workspace</div>
          <h1 style={{ margin:0, fontSize:28, fontWeight:600, letterSpacing:-0.5, color:"var(--fg-0)" }}>Projects</h1>
          <div style={{ color:"var(--fg-2)", fontSize:13, marginTop:5 }}>
            <span className="mono" style={{ color:"var(--fg-1)" }}>{PROJECTS.filter(p=>p.status==="active").length}</span> of {PROJECTS.length} active · May 2026 (partial)
          </div>
        </div>
        <div style={{ display:"flex", gap:8 }}>
          <PeriodSwitcher/>
          <RefreshBtn/>
          <button style={btnPrimary()}><Icon name="plus" size={14}/> New project</button>
        </div>
      </header>

      {/* ── KPI strip ─────────────────────────────────────── */}
      <div className="card" style={{ padding:0, display:"grid", gridTemplateColumns:"1.3fr 1fr 1fr 1.2fr", overflow:"hidden" }}>
        <ProjectsKPI
          label="Total spend"
          value={<Money value={PERIOD.totalGBP} size="lg"/>}
          delta={PERIOD.deltaPct}
          sub={<span>vs <span className="mono">{fmtGBP(PERIOD.previousTotalGBP)}</span> in April</span>}
          sparkline={headerSeries}
          color="var(--accent)"
        />
        <ProjectsKPI
          label="Requests"
          value={<span className="mono" style={{ fontSize:22, fontWeight:600, color:"var(--fg-0)" }}>{PERIOD.requests.toLocaleString()}</span>}
          delta={0.521}
          sub={<span><span className="mono">{Math.round(PERIOD.requests/PERIOD.daysElapsed)}</span> per day</span>}
          sparkline={DAILY.map(d=>d.reqs)}
          color="var(--p-google)"
          border
        />
        <ProjectsKPI
          label="Avg cost / project"
          value={<Money value={PERIOD.totalGBP / PROJECTS.filter(p=>p.status==='active').length} size="lg"/>}
          delta={null}
          sub={<span>across <span className="mono">{PROJECTS.filter(p=>p.status==='active').length}</span> active</span>}
          icon="layers"
          border
        />
        <MostActiveKPI border/>
      </div>

      {/* ── Filter / search bar ───────────────────────────── */}
      <section className="card" style={{ padding:0, overflow:"hidden" }}>
        <div style={{ padding:"14px 18px", borderBottom:"1px solid var(--line-1)", display:"flex", alignItems:"center", gap:12, flexWrap:"wrap" }}>
          <Segmented
            value={tier} onChange={setTier}
            options={[
              { id:"all", label:"All", count: PROJECTS.length },
              { id:"top", label:"Top spenders", count: PROJECTS.filter(p=>p.spend>=10).length },
              { id:"active", label:"Active", count: PROJECTS.filter(p=>p.spend>=0.5 && p.spend<10).length },
              { id:"background", label:"Background", count: PROJECTS.filter(p=>p.spend>=0.001 && p.spend<0.5).length },
              { id:"dormant", label:"Dormant", count: PROJECTS.filter(p=>p.spend<0.001).length },
            ]}
          />
          <div style={{ flex:1 }}/>
          <ProviderChips value={provider} onChange={setProvider}/>
          <div style={{ position:"relative", width:220 }}>
            <span style={{ position:"absolute", left:10, top:"50%", transform:"translateY(-50%)", color:"var(--fg-3)", display:"flex" }}>
              <Icon name="search" size={13} stroke="var(--fg-3)"/>
            </span>
            <input
              placeholder="Search projects…"
              value={query}
              onChange={e=>setQuery(e.target.value)}
              style={{
                height:32, padding:"0 10px 0 30px", width:"100%",
                border:"1px solid var(--line-2)", borderRadius:8, background:"#fff",
                fontFamily:"inherit", fontSize:12.5, color:"var(--fg-0)", outline:"none",
              }}
            />
          </div>
        </div>

        {/* Column header */}
        <div style={{ display:"grid", gridTemplateColumns:"minmax(220px, 1.6fr) 88px 110px 110px 100px 110px 180px 110px 28px", gap:8, padding:"11px 22px", fontSize:10.5, letterSpacing:0.06, textTransform:"uppercase", color:"var(--fg-2)", fontWeight:500, borderBottom:"1px solid var(--line-1)", background:"rgba(20,16,8,0.015)" }}>
          <div style={{ cursor:"pointer" }} onClick={()=>setSort("spend")}>Project</div>
          <div>Status</div>
          <div className="right" style={{ cursor:"pointer", color: sort==="spend"?"var(--fg-0)":"var(--fg-2)" }} onClick={()=>setSort("spend")}>Period spend {sort==="spend"&&"↓"}</div>
          <div className="right">All-time</div>
          <div className="right" style={{ cursor:"pointer", color: sort==="requests"?"var(--fg-0)":"var(--fg-2)" }} onClick={()=>setSort("requests")}>Requests {sort==="requests"&&"↓"}</div>
          <div>Top model</div>
          <div>11-day trend</div>
          <div className="right" style={{ cursor:"pointer", color: sort==="recent"?"var(--fg-0)":"var(--fg-2)" }} onClick={()=>setSort("recent")}>Last active</div>
          <div></div>
        </div>

        {/* Groups */}
        {groups.map((g,gi) => (
          <div key={g.id}>
            <div style={{ padding:"12px 22px 8px", display:"flex", alignItems:"baseline", gap:10, borderTop: gi>0 ? "1px solid var(--line-1)" : "none", background:"rgba(20,16,8,0.01)" }}>
              <span style={{ fontSize:11, fontWeight:600, color:"var(--fg-0)", letterSpacing:0.04, textTransform:"uppercase" }}>{g.label}</span>
              <span style={{ fontSize:11, color:"var(--fg-3)" }}>{g.hint}</span>
              <div style={{ flex:1 }}/>
              <span className="badge badge--ghost" style={{ fontSize:10.5 }}>{g.items.length}</span>
            </div>
            <div>
              {g.items.map(p => <ProjectRow key={p.slug} project={p} onOpen={()=>{ setProject(p.slug); setScreen("project-detail"); }}/>)}
            </div>
          </div>
        ))}

        {rows.length === 0 && (
          <div style={{ padding:"60px 22px", textAlign:"center", color:"var(--fg-2)" }}>
            <div style={{ fontSize:13, marginBottom:6 }}>No projects match that filter</div>
            <button style={btnGhost()} onClick={()=>{ setQuery(""); setTier("all"); setProvider("all"); }}>Clear filters</button>
          </div>
        )}
      </section>

      <div style={{ textAlign:"center", color:"var(--fg-3)", fontSize:11, marginTop:6 }}>{rows.length} projects shown · data as of today</div>
    </div>
  );
}

// ── KPI card variant for Projects ─────────────────────────
function ProjectsKPI({ label, value, delta, sub, sparkline, color, border, icon }){
  return (
    <div style={{ padding:"18px 20px 16px", borderLeft: border ? "1px solid var(--line-1)" : "none", position:"relative", overflow:"hidden" }}>
      <div style={{ display:"flex", alignItems:"center", justifyContent:"space-between", marginBottom:8 }}>
        <span style={{ fontSize:10.5, letterSpacing:0.08, textTransform:"uppercase", color:"var(--fg-3)", fontWeight:600 }}>{label}</span>
        {icon && <Icon name={icon} size={13} stroke="var(--fg-3)"/>}
      </div>
      <div style={{ display:"flex", alignItems:"baseline", gap:8 }}>
        {value}
        {delta != null && <Delta pct={delta}/>}
      </div>
      <div style={{ fontSize:11.5, color:"var(--fg-2)", marginTop:5 }}>{sub}</div>
      {sparkline && (
        <div style={{ position:"absolute", right:14, top:38, opacity:0.7 }}>
          <Sparkline data={sparkline} w={64} h={22} color={color || "var(--accent)"}/>
        </div>
      )}
    </div>
  );
}

function MostActiveKPI({ border }){
  const top = [...PROJECTS].sort((a,b)=>b.spend-a.spend)[0];
  return (
    <div style={{ padding:"18px 20px 16px", borderLeft: border ? "1px solid var(--line-1)" : "none", background:"linear-gradient(135deg, rgba(91,80,238,0.05), transparent 80%)" }}>
      <div style={{ display:"flex", alignItems:"center", justifyContent:"space-between", marginBottom:8 }}>
        <span style={{ fontSize:10.5, letterSpacing:0.08, textTransform:"uppercase", color:"var(--fg-3)", fontWeight:600 }}>Most active</span>
        <Icon name="starOn" size={13} stroke="var(--accent)"/>
      </div>
      <div style={{ display:"flex", alignItems:"center", gap:8 }}>
        <span style={{ fontSize:18, fontWeight:600, color:"var(--fg-0)", letterSpacing:-0.2 }}>{top.name}</span>
        <span className="badge badge--accent" style={{ fontSize:10 }}>#1</span>
      </div>
      <div style={{ fontSize:11.5, color:"var(--fg-2)", marginTop:5 }}>
        <span className="mono">{top.requests.toLocaleString()}</span> requests · <Money value={top.spend} size="sm" strong={false}/>
      </div>
    </div>
  );
}

// ── Project row ────────────────────────────────────────────
function ProjectRow({ project: p, onOpen }){
  const cpr = p.requests > 0 ? p.spend/p.requests : 0;
  const series = makeSeries(p.spend, 11, p.shape);
  const sparkColor = p.spend > 1 ? "var(--accent)" : "var(--fg-3)";

  return (
    <div
      onClick={onOpen}
      style={{
        display:"grid", gridTemplateColumns:"minmax(220px, 1.6fr) 88px 110px 110px 100px 110px 180px 110px 28px",
        gap:8, padding:"12px 22px", alignItems:"center",
        borderTop:"1px solid var(--line-1)",
        cursor:"pointer",
        transition:"background 80ms ease",
      }}
      onMouseEnter={e=>e.currentTarget.style.background="rgba(20,16,8,0.025)"}
      onMouseLeave={e=>e.currentTarget.style.background="transparent"}
    >
      <div style={{ display:"flex", flexDirection:"column", minWidth:0, gap:1 }}>
        <span style={{ color:"var(--fg-0)", fontWeight:500, overflow:"hidden", textOverflow:"ellipsis", whiteSpace:"nowrap" }}>{p.name}</span>
        <span className="mono" style={{ fontSize:10.5, color:"var(--fg-3)" }}>/{p.slug}</span>
      </div>

      <div>
        <span style={{ display:"inline-flex", alignItems:"center", gap:5, fontSize:11.5, color:"var(--pos)", padding:"2px 8px", borderRadius:99, background:"var(--pos-soft)", border:"1px solid rgba(15,138,79,0.22)" }}>
          <span style={{ width:5, height:5, borderRadius:"50%", background:"var(--pos)" }}/>Active
        </span>
      </div>

      <div className="right"><Money value={p.spend} size="sm"/></div>
      <div className="right mono" style={{ color:"var(--fg-2)", fontSize:12 }}>{fmtGBP(p.allTime)}</div>
      <div className="right mono" style={{ color:"var(--fg-1)", fontSize:12.5 }}>{p.requests.toLocaleString()}</div>

      <div><ModelBadge model={p.primaryModel}/></div>

      <div style={{ display:"flex", alignItems:"center", gap:8 }}>
        <Sparkline data={series} w={120} h={20} color={sparkColor} fill={p.spend>1}/>
      </div>

      <div className="right mono" style={{ color:"var(--fg-2)", fontSize:12 }}>{p.lastActive}</div>

      <div style={{ color:"var(--fg-3)", display:"flex", justifyContent:"flex-end" }}>
        <Icon name="chevron" size={13}/>
      </div>
    </div>
  );
}

// ── Segmented control ─────────────────────────────────────
function Segmented({ options, value, onChange }){
  return (
    <div style={{ display:"inline-flex", padding:3, background:"var(--bg-3)", borderRadius:9, border:"1px solid var(--line-1)" }}>
      {options.map(o => {
        const active = value === o.id;
        return (
          <button
            key={o.id}
            onClick={()=>onChange(o.id)}
            style={{
              appearance:"none", border:"none",
              padding:"5px 11px", borderRadius:7,
              background: active ? "#fff" : "transparent",
              boxShadow: active ? "0 0 0 1px var(--line-1), 0 1px 1px rgba(20,16,8,0.04)" : "none",
              color: active ? "var(--fg-0)" : "var(--fg-2)",
              fontSize:12, fontWeight: active ? 500 : 400,
              display:"inline-flex", alignItems:"center", gap:6,
              cursor:"pointer",
            }}
          >
            {o.label}
            {o.count != null && <span style={{ fontSize:10, color: active ? "var(--fg-3)" : "var(--fg-3)", fontFamily:"var(--font-mono)" }}>{o.count}</span>}
          </button>
        );
      })}
    </div>
  );
}

// ── Provider filter chips ─────────────────────────────────
function ProviderChips({ value, onChange }){
  const providers = ["all", "anthropic", "google"];
  return (
    <div style={{ display:"inline-flex", gap:6 }}>
      {providers.map(p => {
        const active = value === p;
        const label = p === "all" ? "All providers" : PROVIDERS[p].name;
        return (
          <button
            key={p}
            onClick={()=>onChange(p)}
            style={{
              height:32, padding:"0 11px",
              border:"1px solid "+(active ? "var(--fg-0)" : "var(--line-2)"),
              background: active ? "var(--fg-0)" : "#fff",
              color: active ? "#fff" : "var(--fg-1)",
              borderRadius:8, fontSize:12, fontWeight:500,
              display:"inline-flex", alignItems:"center", gap:7,
              cursor:"pointer",
            }}
          >
            {p !== "all" && <span style={{ width:8, height:8, borderRadius:"50%", background:PROVIDERS[p].color }}/>}
            {label}
          </button>
        );
      })}
    </div>
  );
}

Object.assign(window, { Projects });
