/* =====================================================================
   AI-COS — Command-center Dashboard
   ===================================================================== */
function Dashboard({ onNav, openJob }) {
  const DB = window.DB;
  const stageCounts = DB.stages.map((s) => ({ s, n: DB.jobs.filter((j) => j.stage === s).length }));
  const reviewJobs = DB.jobs.filter((j) => j.stage === 'Review' || j.stage === 'In progress');

  return (
    <div className="page page-wide rise">
      {/* Header */}
      <div className="row" style={{ justifyContent: 'space-between', alignItems: 'flex-end', marginBottom: 20 }}>
        <div>
          <div className="h-page">Good morning, Savad</div>
          <div className="h-sub">Saturday, 6 June 2026 · Al Duqum Al Masiya ENT · <span style={{ color: 'var(--ok)', fontWeight: 600 }}>All systems nominal</span></div>
        </div>
        <div className="row" style={{ gap: 8 }}>
          <Btn icon="refresh" size="sm" onClick={() => window.toast('Due dates recalculated · reminders queued', 'info')}>Sync</Btn>
          <Btn variant="ghost" icon="download" size="sm" onClick={() => window.toast('Dashboard exported (PDF)')}>Export</Btn>
          <Btn variant="primary" icon="plus" onClick={() => onNav('jobs')}>New job</Btn>
        </div>
      </div>

      {/* KPIs */}
      <div className="kpi-grid" style={{ gridTemplateColumns: 'repeat(6, 1fr)', marginBottom: 16 }}>
        <Kpi label="Due this month" value={DB.kpis.dueThisMonth} icon="calendar" tone="info" delta="32 under AMC" deltaDir="up" />
        <Kpi label="Overdue" value={DB.kpis.overdue} icon="alert" tone="bad" delta="AI: 7 high-risk" sub="" />
        <Kpi label="Active jobs" value={DB.kpis.jobsActive} icon="workflow" tone="info" delta="6 in review" />
        <Kpi label="Certs issued (Jun)" value={DB.kpis.certsThisMonth} icon="certificate" tone="ok" delta="+14%" deltaDir="up" />
        <Kpi label="Avg turnaround" value={DB.kpis.turnaround} unit="d" icon="clock" tone="info" delta="-0.3d" deltaDir="up" />
        <Kpi label="Revenue (Jun)" value={DB.kpis.revenueMonth} unit="K OMR" icon="receipt" tone="ok" delta="+8%" deltaDir="up" />
      </div>

      <div style={{ display: 'grid', gridTemplateColumns: '1.62fr 1fr', gap: 16, alignItems: 'start' }}>
        {/* LEFT column */}
        <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
          {/* Readiness + pipeline */}
          <div className="card">
            <div className="card-head">
              <Icon name="shield" size={17} style={{ color: 'var(--primary-600)' }} />
              <div className="h-sec">Audit readiness &amp; live pipeline</div>
              <span className="spacer" />
              <Badge kind="ai" icon="sparkles">Continuously scored</Badge>
            </div>
            <div className="card-body" style={{ display: 'grid', gridTemplateColumns: '180px 1fr', gap: 22, alignItems: 'center' }}>
              <div style={{ display: 'grid', placeItems: 'center' }}>
                <Ring value={DB.readiness.score} color="var(--ok)">
                  <div>
                    <div style={{ fontSize: 34, fontWeight: 800, letterSpacing: '-1px', lineHeight: 1 }}>{DB.readiness.score}</div>
                    <div className="faint" style={{ fontSize: 11, fontWeight: 600 }}>/ 100</div>
                    <div className="badge b-ok" style={{ marginTop: 6 }}>Audit-ready</div>
                  </div>
                </Ring>
              </div>
              <div style={{ display: 'flex', flexDirection: 'column', gap: 7 }}>
                {DB.readiness.factors.map((f, i) => (
                  <div key={i} className="row" style={{ gap: 10 }}>
                    <span style={{ width: 150, fontSize: 12.5, color: 'var(--text-2)', fontWeight: 600 }}>{f.label}</span>
                    <div style={{ flex: 1 }}><Bar pct={100 + f.value * 6} color={f.value < 0 ? 'var(--warn)' : 'var(--ok)'} /></div>
                    <span className="mono" style={{ width: 28, textAlign: 'right', fontSize: 12, fontWeight: 700, color: f.value < 0 ? 'var(--warn)' : 'var(--ok)' }}>{f.value === 0 ? '✓' : f.value}</span>
                  </div>
                ))}
              </div>
            </div>
            {/* pipeline strip */}
            <div style={{ display: 'grid', gridTemplateColumns: `repeat(${DB.stages.length}, 1fr)`, borderTop: '1px solid var(--border)' }}>
              {stageCounts.map((sc, i) => (
                <div key={sc.s} style={{ padding: '13px 12px', borderLeft: i ? '1px solid var(--border)' : 'none', cursor: 'pointer' }} onClick={() => onNav('jobs')} className="hover-lift">
                  <div className="row" style={{ gap: 7 }}>
                    <span style={{ width: 7, height: 7, borderRadius: '50%', background: ['#94a3b8', '#2f6fed', '#c9820a', '#7a5bff', '#15a06b', '#0f7a4f'][i] }} />
                    <span style={{ fontSize: 11.5, fontWeight: 600, color: 'var(--text-2)' }}>{sc.s}</span>
                  </div>
                  <div style={{ fontSize: 23, fontWeight: 800, letterSpacing: '-.5px', marginTop: 4 }}>{sc.n}</div>
                </div>
              ))}
            </div>
          </div>

          {/* Needs attention queue */}
          <div className="card">
            <div className="card-head">
              <Icon name="flag" size={16} style={{ color: 'var(--warn)' }} />
              <div className="h-sec">Needs your attention</div>
              <span className="spacer" />
              <Btn size="sm" iconR="arrowR" onClick={() => onNav('jobs')}>All jobs</Btn>
            </div>
            <table className="tbl">
              <thead><tr><th>Job</th><th>Customer</th><th>Stage</th><th>Tech</th><th>SLA</th><th>Due</th><th></th></tr></thead>
              <tbody>
                {reviewJobs.map((j) => {
                  const c = DB.custById(j.customer);
                  return (
                    <tr key={j.id} className="clickable" onClick={() => openJob(j.id)}>
                      <td><span className="mono cell-strong" style={{ fontSize: 12.5 }}>{j.id}</span><div className="cell-sub">{j.items} items · {j.type}</div></td>
                      <td><div className="row" style={{ gap: 7 }}><span className="avatar avatar-sm" style={{ background: c.color, borderRadius: 6 }}>{c.short}</span><span style={{ fontSize: 12.5 }}>{c.short}</span></div></td>
                      <td><StatusBadge status={j.stage} /></td>
                      <td>{j.tech ? <Avatar id={j.tech} size="sm" /> : <span className="faint">—</span>}</td>
                      <td style={{ width: 92 }}><Bar pct={j.sla} color={j.sla > 85 ? 'var(--ok)' : j.sla > 50 ? 'var(--primary-600)' : 'var(--warn)'} /></td>
                      <td><span style={{ fontSize: 12.5, fontWeight: 600, color: j.due <= DB.TODAY ? 'var(--bad)' : 'var(--text)' }}>{DB.rel(j.due)}</span></td>
                      <td><Icon name="chevR" size={16} style={{ color: 'var(--text-3)' }} /></td>
                    </tr>
                  );
                })}
              </tbody>
            </table>
          </div>
        </div>

        {/* RIGHT column */}
        <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
          {/* AI feed */}
          <div className="card">
            <div className="card-head" style={{ background: 'linear-gradient(120deg, var(--ai-bg), #fff)' }}>
              <span className="ai-badge-ico"><Icon name="sparkles" size={15} fill /></span>
              <div className="h-sec">AI signals</div>
              <span className="spacer" />
              <Badge kind="ai">4 active</Badge>
            </div>
            <div className="card-body" style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
              {DB.aiAlerts.slice(0, 3).map((a) => (
                <AINote key={a.id} title={a.title} clause={a.clause} action={a.action} onAction={() => onNav('iso')}>{a.body}</AINote>
              ))}
            </div>
          </div>

          {/* Standards / cylinder watch */}
          <div className="card">
            <div className="card-head">
              <Icon name="cylinder" size={16} style={{ color: 'var(--primary-600)' }} />
              <div className="h-sec">Standards &amp; cylinder watch</div>
              <span className="spacer" />
              <Btn size="sm" onClick={() => onNav('cylinders')}>Open</Btn>
            </div>
            <div className="card-body" style={{ paddingTop: 6, paddingBottom: 6 }}>
              {DB.cylinders.filter((c) => c.status !== 'Active').concat(DB.cylinders.filter(c => c.status === 'Active').slice(0, 1)).map((c) => {
                const pct = Math.round((c.pressure / c.p0) * 100);
                return (
                  <div key={c.id} className="lrow" style={{ cursor: 'pointer' }} onClick={() => window.openDetail('cylinder', c)}>
                    <span style={{ width: 34, height: 34, borderRadius: 9, background: 'var(--bg)', border: '1px solid var(--border)', display: 'grid', placeItems: 'center', flex: 'none' }}><Icon name="cylinder" size={17} style={{ color: 'var(--text-2)' }} /></span>
                    <div style={{ flex: 1, minWidth: 0 }}>
                      <div className="row" style={{ gap: 7 }}><span className="mono cell-strong" style={{ fontSize: 12 }}>{c.id}</span><span className="faint" style={{ fontSize: 11.5 }}>{c.mix}</span></div>
                      <div className="row" style={{ gap: 6, marginTop: 4 }}><div style={{ width: 70 }}><Bar pct={pct} color={pct < 25 ? 'var(--bad)' : pct < 50 ? 'var(--warn)' : 'var(--ok)'} /></div><span className="faint" style={{ fontSize: 11 }}>{c.pressure} psi</span></div>
                    </div>
                    <StatusBadge status={c.status} />
                  </div>
                );
              })}
            </div>
          </div>

          {/* Environment */}
          <div className="card">
            <div className="card-head">
              <Icon name="thermometer" size={16} style={{ color: 'var(--primary-600)' }} />
              <div className="h-sec">Laboratory environment</div>
              <span className="spacer" />
              <Badge kind="ok" dot>In range</Badge>
            </div>
            <div className="card-body">
              <div className="row" style={{ gap: 18, marginBottom: 12 }}>
                <EnvStat icon="thermometer" label="Temp" value="22.4" unit="°C" range="18–25 °C" />
                <EnvStat icon="droplet" label="Humidity" value="47" unit="%RH" range="30–60 %" />
                <EnvStat icon="gauge" label="Pressure" value="1009" unit="hPa" range="±30 hPa" />
              </div>
              <EnvSpark series={DB.envSeries} />
              <div className="faint" style={{ fontSize: 11, marginTop: 8 }}>Continuous monitoring · method-gated per ISO 17025 §6.3 · last 24h</div>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

function EnvStat({ icon, label, value, unit, range }) {
  return (
    <div style={{ flex: 1 }}>
      <div className="row" style={{ gap: 6, color: 'var(--text-2)', fontSize: 11.5, fontWeight: 600 }}><Icon name={icon} size={13} />{label}</div>
      <div style={{ fontSize: 20, fontWeight: 800, letterSpacing: '-.5px', marginTop: 3 }}>{value}<span style={{ fontSize: 12, color: 'var(--text-3)', marginLeft: 2 }}>{unit}</span></div>
      <div className="faint" style={{ fontSize: 10.5 }}>{range}</div>
    </div>
  );
}

function EnvSpark({ series }) {
  const w = 100, h = 34;
  const temps = series.map((s) => s.temp);
  const min = Math.min(...temps) - 0.5, max = Math.max(...temps) + 0.5;
  const pts = series.map((s, i) => `${(i / (series.length - 1)) * w},${h - ((s.temp - min) / (max - min)) * h}`).join(' ');
  return (
    <svg viewBox={`0 0 ${w} ${h}`} preserveAspectRatio="none" style={{ width: '100%', height: 40 }}>
      <defs><linearGradient id="envg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stopColor="rgba(47,111,237,.22)" /><stop offset="1" stopColor="rgba(47,111,237,0)" /></linearGradient></defs>
      <polygon points={`0,${h} ${pts} ${w},${h}`} fill="url(#envg)" />
      <polyline points={pts} fill="none" stroke="var(--primary-600)" strokeWidth="1.4" vectorEffect="non-scaling-stroke" />
    </svg>
  );
}

window.Dashboard = Dashboard;
