// Dashboard — results cards (ALG1, jobs, courses, next steps)

function Dashboard({ persona, onNav }) {
  const { t, f } = useTheme();
  const alg = computeAlg1(persona);
  const market = MARKET[persona.branche];
  const courses = COURSES[persona.branche] || [];
  const topJobs = market.top.slice(0, 3);

  return (
    <div className="paper-grain proto-scroll" style={{
      width: '100%', height: '100%', background: t.paper, color: t.ink,
      fontFamily: f.sans, overflow: 'auto', position: 'relative',
    }}>
      <div style={{ position: 'relative', zIndex: 2 }}>
        <NavBar active="dashboard" onNav={onNav} persona={persona} />

        {/* masthead */}
        <div style={{ padding: '48px 48px 32px' }}>
          <Eyebrow>Ihr Dossier · {new Date().toLocaleDateString('de-DE', { day: '2-digit', month: 'long', year: 'numeric' })}</Eyebrow>
          <Display size={56} style={{ marginTop: 12, marginBottom: 10 }}>
            Guten Tag, <em style={{ fontStyle: 'italic', color: t.accent }}>{persona.name.split(' ')[0]}</em>.
          </Display>
          <Body size={17} style={{ maxWidth: 720 }}>
            Wir haben Ihre Antworten mit den Daten der Bundesagentur abgeglichen. Das Wichtigste zuerst:
            Sie haben Anspruch auf Arbeitslosengeld, der Arbeitsmarkt in Ihrer Branche ist
            {market.trendDir === 'up' ? ' aufnahmefähig' : ' angespannt, aber nicht aussichtslos'},
            und es gibt {courses.length} passende Umschulungen mit Bildungsgutschein.
          </Body>
        </div>

        <Rule />

        {/* ALG1 primary card */}
        <div style={{ padding: '40px 48px' }}>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr 1fr', gap: 48, alignItems: 'end', paddingBottom: 32 }}>
            <div style={{ gridColumn: 'span 2' }}>
              <Eyebrow>I — Was Ihnen zusteht</Eyebrow>
              <Display size={44} style={{ marginTop: 10 }}>Arbeitslosengeld 1</Display>
              <Body size={14} style={{ marginTop: 6 }}>
                Bei {persona.years} Beitragsjahren und Ihrem Alter haben Sie Anspruch auf ~{alg.months} Monate
                ALG1 zum Satz von {Math.round(alg.rate * 100)} %.
              </Body>
            </div>
            <div style={{ textAlign: 'right' }}>
              <Mono size={10}>Pro Monat</Mono>
              <div style={{ fontFamily: f.display, fontSize: 56, fontWeight: f.displayWeight, letterSpacing: f.displayTracking, color: t.accent, lineHeight: 1 }}>
                {fmtEUR(alg.algMonat)}
              </div>
            </div>
            <div style={{ textAlign: 'right' }}>
              <Mono size={10}>Summe über {alg.months} Monate</Mono>
              <div style={{ fontFamily: f.display, fontSize: 40, fontWeight: f.displayWeight, letterSpacing: f.displayTracking, color: t.ink, lineHeight: 1, marginTop: 8 }}>
                {fmtEUR(alg.total)}
              </div>
            </div>
          </div>

          {/* alg timeline */}
          <div style={{ position: 'relative', marginTop: 20 }}>
            <div style={{ display: 'flex', height: 54, border: `1px solid ${t.rule}` }}>
              {alg.sperr > 0 && (
                <div style={{
                  width: `${(alg.sperr / (alg.months * 4.33 + alg.sperr)) * 100}%`,
                  background: `repeating-linear-gradient(45deg, ${t.warn} 0 4px, ${t.paper} 4px 8px)`,
                  display: 'flex', alignItems: 'center', justifyContent: 'center',
                }}>
                  <Mono size={10} style={{ color: t.warn }}>Sperrzeit {alg.sperr} Wo.</Mono>
                </div>
              )}
              <div style={{
                flex: 1, background: t.accent,
                display: 'flex', alignItems: 'center', padding: '0 16px',
              }}>
                <span style={{ color: t.paper, fontFamily: f.sans, fontSize: 13 }}>ALG1-Bezug · {alg.months} Monate</span>
              </div>
            </div>
            <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: 6 }}>
              <Mono size={10}>heute</Mono>
              <Mono size={10}>+{alg.months} Monate</Mono>
            </div>
          </div>

          {/* sub-facts */}
          <div style={{ marginTop: 24, display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 32, paddingTop: 24, borderTop: `1px solid ${t.rule}` }}>
            <Fact label="Sperrzeit" value={alg.sperr > 0 ? `${alg.sperr} Wochen` : 'keine'} tone={alg.sperr > 0 ? 'warn' : 'good'}
              hint={alg.sperr > 0 ? 'Wegen Aufhebungsvertrag' : 'Betriebsbedingte Kündigung'} />
            <Fact label="Abfindung (netto, grob)" value={persona.hasAbfindung ? fmtEUR(Math.round(persona.hasAbfindung * 0.68)) : '—'}
              hint={persona.hasAbfindung ? 'Fünftelregelung prüfen' : 'Kein Betrag angegeben'} />
            <Fact label="Krankenversicherung" value="über ALG1" hint="Beiträge von der Agentur" />
            <Fact label="Bildungsgutschein" value="realistisch" tone="good" hint="Ihr Profil erfüllt Kriterien" />
          </div>

          <div style={{ marginTop: 20, display: 'flex', gap: 12 }}>
            <Btn variant="primary" onClick={() => onNav('plan')}>Antrag Schritt für Schritt →</Btn>
            <Btn variant="ghost">Berechnung im Detail</Btn>
            <Btn variant="link">Annahmen anpassen</Btn>
          </div>
        </div>

        <Rule />

        {/* Two-column: jobs + courses */}
        <div style={{ padding: '40px 48px', display: 'grid', gridTemplateColumns: '1.15fr 1fr', gap: 48 }}>
          <div>
            <Eyebrow>II — Arbeitsmarkt für {persona.branche}</Eyebrow>
            <Display size={32} style={{ marginTop: 10, marginBottom: 14 }}>
              {market.trendDir === 'up' ? 'Der Markt nimmt auf.' : 'Der Markt ist eng.'}
            </Display>

            <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 16, marginBottom: 24 }}>
              <MiniStat label="Offene Stellen" value={fmtNum(market.openJobs)} />
              <MiniStat label="Nachfrage-Index" value={`${market.demandIndex}/100`} sub={<Bar value={market.demandIndex} />} />
              <MiniStat label="Trend Q/Q" value={market.trend} tone={market.trendDir === 'up' ? 'good' : 'warn'} />
            </div>

            <Eyebrow style={{ marginBottom: 10 }}>Passende Berufe — sortiert nach Match</Eyebrow>
            <div>
              {topJobs.map((j, i) => (
                <div key={i} style={{
                  display: 'grid', gridTemplateColumns: '1fr auto auto auto',
                  alignItems: 'center', gap: 20,
                  padding: '14px 0', borderBottom: `1px solid ${t.rule}`,
                }}>
                  <div>
                    <div style={{ fontFamily: f.display, fontSize: 18, fontWeight: f.displayWeight, color: t.ink }}>{j.title}</div>
                    <Mono size={10}>{fmtNum(j.n)} offene Stellen bundesweit</Mono>
                  </div>
                  <Mono size={11}>median {fmtEUR(j.medianSalary)}</Mono>
                  <div style={{ width: 64 }}><Bar value={j.match} /></div>
                  <div style={{ fontFamily: f.display, fontSize: 22, fontWeight: f.displayWeight, color: t.accent, minWidth: 48, textAlign: 'right' }}>{j.match}</div>
                </div>
              ))}
            </div>
            <Btn variant="link" style={{ marginTop: 14 }} onClick={() => onNav('market')}>Vollständige Marktdaten →</Btn>
          </div>

          <div>
            <Eyebrow>III — Wenn Sie umdenken möchten</Eyebrow>
            <Display size={32} style={{ marginTop: 10, marginBottom: 14 }}>
              Umschulungen mit Bildungsgutschein.
            </Display>
            <Body size={14} style={{ marginBottom: 18 }}>
              Drei Kurse, bei denen Ihr Profil zu ≥ 75 % passt. Kosten und Lebensunterhalt werden bei Bewilligung übernommen.
            </Body>

            <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
              {courses.map((c, i) => <CourseCard key={i} c={c} num={i+1} />)}
            </div>
            <Btn variant="link" style={{ marginTop: 14 }} onClick={() => onNav('courses')}>Alle Kurse für Ihr Profil →</Btn>
          </div>
        </div>

        <Rule />

        {/* Next steps */}
        <div style={{ padding: '40px 48px 72px' }}>
          <Eyebrow>IV — Die nächsten 14 Tage</Eyebrow>
          <Display size={32} style={{ marginTop: 10, marginBottom: 20 }}>Ein Plan, keine Panik.</Display>
          <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 20 }}>
            {[
              { n: '01', due: 'binnen 3 Tagen', t: 'Arbeitssuchend melden', s: 'Persönlich, online oder telefonisch bei der Agentur.' },
              { n: '02', due: 'bis letzter Tag', t: 'Arbeitslos melden', s: 'Am ersten Tag ohne Job, sonst Anspruchsverlust.' },
              { n: '03', due: 'Woche 1', t: 'ALG1 beantragen', s: 'Online mit E-ID oder schriftlich. Wir haben das Formular für Sie befüllt.' },
              { n: '04', due: 'Woche 2', t: 'Bildungsgutschein besprechen', s: 'Vermittlungsgespräch vorbereiten — mit klarem Kurswunsch.' },
            ].map(s => (
              <div key={s.n} style={{
                padding: 20, background: t.paper2, borderTop: `3px solid ${t.accent}`,
              }}>
                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline' }}>
                  <Mono size={14} style={{ color: t.accent, fontWeight: 500 }}>{s.n}</Mono>
                  <Mono size={10}>{s.due}</Mono>
                </div>
                <div style={{ fontFamily: f.display, fontSize: 22, fontWeight: f.displayWeight, marginTop: 12, lineHeight: 1.15 }}>{s.t}</div>
                <Body size={13} style={{ marginTop: 10 }}>{s.s}</Body>
              </div>
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}

function Fact({ label, value, hint, tone }) {
  const { t, f } = useTheme();
  const color = tone === 'warn' ? t.warn : tone === 'good' ? t.good : t.ink;
  return (
    <div>
      <Mono size={10}>{label}</Mono>
      <div style={{ fontFamily: f.display, fontSize: 24, fontWeight: f.displayWeight, color, marginTop: 6 }}>{value}</div>
      <Body size={12} style={{ marginTop: 2 }}>{hint}</Body>
    </div>
  );
}

function MiniStat({ label, value, sub, tone }) {
  const { t, f } = useTheme();
  const color = tone === 'warn' ? t.warn : tone === 'good' ? t.good : t.ink;
  return (
    <div style={{ padding: 16, background: t.paper2 }}>
      <Mono size={10}>{label}</Mono>
      <div style={{ fontFamily: f.display, fontSize: 28, fontWeight: f.displayWeight, color, marginTop: 8 }}>{value}</div>
      {sub && <div style={{ marginTop: 10 }}>{sub}</div>}
    </div>
  );
}

function CourseCard({ c, num }) {
  const { t, f } = useTheme();
  return (
    <div style={{
      padding: 16, background: t.paper2, border: `1px solid ${t.rule}`,
      display: 'grid', gridTemplateColumns: '1fr auto', gap: 16, alignItems: 'start',
    }}>
      <div>
        <div style={{ display: 'flex', gap: 8, alignItems: 'baseline' }}>
          <Mono size={10}>№{String(num).padStart(2, '0')}</Mono>
          {c.funded && <Pill tone="good">Bildungsgutschein</Pill>}
        </div>
        <div style={{ fontFamily: f.display, fontSize: 19, fontWeight: f.displayWeight, marginTop: 8, lineHeight: 1.2 }}>{c.title}</div>
        <div style={{ display: 'flex', gap: 10, marginTop: 6, flexWrap: 'wrap' }}>
          <Mono size={10}>{c.provider}</Mono>
          <Mono size={10}>·</Mono>
          <Mono size={10}>{c.weeks} Wo.</Mono>
          <Mono size={10}>·</Mono>
          <Mono size={10}>{c.format}</Mono>
        </div>
      </div>
      <div style={{ textAlign: 'right' }}>
        <div style={{ fontFamily: f.display, fontSize: 28, fontWeight: f.displayWeight, color: t.accent, lineHeight: 1 }}>{c.match}</div>
        <Mono size={9}>Match</Mono>
      </div>
    </div>
  );
}

Object.assign(window, { Dashboard, Fact, MiniStat, CourseCard });
