// MissionChef — Catering · Events (Angebot → Auftrag → Dispo → Durchführung → Abschluss)

function fmtEventDate(iso) {
  const d = new Date(iso);
  return d.toLocaleDateString('de-DE', { weekday: 'short', day: '2-digit', month: '2-digit', year: 'numeric' });
}
function daysUntil(iso) {
  const d = new Date(iso); d.setHours(0,0,0,0);
  const now = new Date(); now.setHours(0,0,0,0);
  return Math.round((d - now) / 86400000);
}

const EVENT_STATES = [
  { id: 'offer',      label: 'Angebot',     tone: 'ember',  order: 1 },
  { id: 'planning',   label: 'Planung',     tone: 'default',order: 2 },
  { id: 'confirmed',  label: 'Bestätigt',   tone: 'leaf',   order: 3 },
  { id: 'production', label: 'Produktion',  tone: 'ink',    order: 4 },
  { id: 'completed',  label: 'Abgeschlossen',tone: 'default',order: 5 },
];

function CateringScreenV2({ Topbar }) {
  const store = useStore();
  const [selected, setSelected] = React.useState(null);
  const [filter, setFilter] = React.useState('all');
  const [showNew, setShowNew] = React.useState(false);

  const sortedEvents = React.useMemo(() =>
    [...store.events].sort((a,b) => new Date(a.date) - new Date(b.date))
  , [store.events]);
  const filtered = filter === 'all' ? sortedEvents : sortedEvents.filter(e => e.state === filter);

  const metrics = React.useMemo(() => {
    const now = new Date(); now.setHours(0,0,0,0);
    const upcoming = store.events.filter(e => new Date(e.date) >= now);
    const totals = upcoming.reduce((acc, e) => {
      const t = eventTotals(e);
      return { revenue: acc.revenue + t.revenue, profit: acc.profit + t.profit, guests: acc.guests + e.guests };
    }, { revenue: 0, profit: 0, guests: 0 });
    return {
      count: upcoming.length,
      guests: totals.guests,
      revenue: totals.revenue,
      profit: totals.profit,
      offers: store.events.filter(e => e.state === 'offer').length,
      margin: totals.revenue > 0 ? (totals.profit / totals.revenue) * 100 : 0,
    };
  }, [store.events]);

  return (
    <>
      <Topbar
        title="Catering"
        subtitle={`${metrics.count} Events · ${fmtINT(metrics.guests)} Gäste · ${fmtEUR(metrics.revenue)} geplant`}
        actions={<button onClick={() => setShowNew(true)} className="mc-btn leaf sm"><McIcon2 name="plus" size={14} />Neues Event</button>}
      />

      <div className="mc-scroll" style={{ flex: 1, overflow: 'auto', padding: 28 }}>
        {/* KPIs */}
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(5, 1fr)', gap: 12, marginBottom: 22 }}>
          <KpiCard label="Events geplant"     value={metrics.count}                  />
          <KpiCard label="Gäste gesamt"        value={fmtINT(metrics.guests)}         />
          <KpiCard label="Umsatz geplant"      value={fmtEUR(metrics.revenue)}  tone="leaf"  />
          <KpiCard label="Deckungsbeitrag"     value={fmtEUR(metrics.profit)}   tone="leaf"  sub={`${metrics.margin.toFixed(1)}% Marge`} />
          <KpiCard label="Offene Angebote"     value={metrics.offers}           tone="ember" />
        </div>

        {/* Filter tabs */}
        <div style={{ display: 'flex', gap: 6, marginBottom: 16 }}>
          <FilterChip label={`Alle (${store.events.length})`} active={filter === 'all'} onClick={() => setFilter('all')} />
          {EVENT_STATES.map(s => {
            const count = store.events.filter(e => e.state === s.id).length;
            if (count === 0) return null;
            return <FilterChip key={s.id} label={`${s.label} (${count})`} active={filter === s.id} onClick={() => setFilter(s.id)} />;
          })}
        </div>

        {/* Event grid */}
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 14 }}>
          {filtered.map(e => (
            <EventCard key={e.id} event={e} staff={store.staff} onOpen={() => setSelected(e)} />
          ))}
        </div>
      </div>

      {selected && <EventDetail event={store.events.find(x => x.id === selected.id)} staff={store.staff} onClose={() => setSelected(null)} />}
      {showNew && <NewEventModal onClose={() => setShowNew(false)} />}
    </>
  );
}

// ─── KPI card ─────────────────────────────────────────────────────────────────
function KpiCard({ label, value, tone, sub }) {
  const color = tone === 'leaf' ? 'var(--mc-leaf-700)' : tone === 'ember' ? 'var(--mc-ember-700)' : 'var(--mc-ink)';
  return (
    <div className="mc-card" style={{ padding: 18 }}>
      <div className="mc-eyebrow">{label}</div>
      <div className="mc-num" style={{ fontSize: 26, fontWeight: 500, marginTop: 6, color }}>{value}</div>
      {sub && <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)', marginTop: 2 }}>{sub}</div>}
    </div>
  );
}
function FilterChip({ label, active, onClick }) {
  return (
    <button onClick={onClick} style={{
      padding: '6px 14px', border: '1px solid var(--mc-rule)', fontSize: 12, cursor: 'pointer',
      fontFamily: 'inherit',
      background: active ? 'var(--mc-ink)' : 'transparent',
      color: active ? 'var(--mc-bg)' : 'var(--mc-ink-muted)',
    }}>{label}</button>
  );
}

// ─── Event card ───────────────────────────────────────────────────────────────
function EventCard({ event, staff, onOpen }) {
  const lead = staff.find(s => s.id === event.lead);
  const stateMeta = EVENT_STATES.find(s => s.id === event.state) || EVENT_STATES[0];
  const t = eventTotals(event);
  const d = daysUntil(event.date);
  const timelineDone = Object.values(event.timeline || {}).filter(Boolean).length;
  const timelineTotal = 11;
  return (
    <div className="mc-card mc-row" onClick={onOpen} style={{ padding: 22, cursor: 'pointer' }}>
      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: 14 }}>
        <div style={{ minWidth: 0, flex: 1 }}>
          <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
            <Pill tone={stateMeta.tone}>{stateMeta.label}</Pill>
            {d >= 0 && d <= 7 && <Pill tone="ember">{d === 0 ? 'Heute' : `in ${d}T`}</Pill>}
            {d < 0 && <Pill tone="default">vergangen</Pill>}
          </div>
          <div style={{ fontSize: 18, fontWeight: 500, letterSpacing: '-0.015em', marginTop: 10, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
            {event.name}
          </div>
          <div style={{ fontSize: 11, color: 'var(--mc-ink-dim)', marginTop: 2 }}>
            {event.customer?.name} · {event.venue}
          </div>
        </div>
        <div style={{ textAlign: 'right', flexShrink: 0 }}>
          <div className="mc-mono" style={{ fontSize: 12, color: 'var(--mc-leaf-700)' }}>{fmtEventDate(event.date)}</div>
          <div className="mc-mono" style={{ fontSize: 10, color: 'var(--mc-ink-dim)', marginTop: 2 }}>{event.startTime}—{event.endTime}</div>
        </div>
      </div>

      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 10, marginTop: 18 }}>
        <div><div className="mc-eyebrow">Gäste</div><div className="mc-num" style={{ fontSize: 18, fontWeight: 500, marginTop: 4 }}>{event.guests}</div></div>
        <div><div className="mc-eyebrow">Format</div><div style={{ fontSize: 12, marginTop: 6 }}>{event.type}</div></div>
        <div><div className="mc-eyebrow">Lead</div><div style={{ fontSize: 12, marginTop: 6 }}>{lead?.name.split(' ')[0] || '—'}</div></div>
      </div>

      <div style={{ marginTop: 16, paddingTop: 14, borderTop: '1px solid var(--mc-rule)', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
        <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)' }}>Fortschritt {timelineDone}/{timelineTotal}</div>
        <div style={{ flex: 1, height: 3, background: 'var(--mc-rule)', margin: '0 12px', position: 'relative' }}>
          <div style={{ position: 'absolute', left: 0, top: 0, bottom: 0, width: `${(timelineDone/timelineTotal)*100}%`, background: 'var(--mc-leaf-700)' }} />
        </div>
        <div className="mc-num" style={{ fontSize: 16, fontWeight: 500 }}>{fmtEUR(t.revenue)}</div>
      </div>
    </div>
  );
}

// ─── Detail drawer ────────────────────────────────────────────────────────────
function EventDetail({ event, staff, onClose }) {
  const [tab, setTab] = React.useState('overview');
  const [showOffer, setShowOffer] = React.useState(false);
  const t = eventTotals(event);
  const stateMeta = EVENT_STATES.find(s => s.id === event.state) || EVENT_STATES[0];

  const changeState = (stateId) => mcApi.patch('/events/' + event.id, { state: stateId });

  const tabs = [
    { id: 'overview',  label: 'Übersicht' },
    { id: 'menu',      label: 'Menü & Kalkulation' },
    { id: 'team',      label: 'Team-Dispo' },
    { id: 'equipment', label: 'Equipment' },
    { id: 'timeline',  label: 'Timeline' },
  ];

  return (
    <div style={{
      position: 'absolute', inset: 0, background: 'var(--mc-bg)',
      zIndex: 500, display: 'flex', flexDirection: 'column',
    }}>
      <div style={{
        width: '100%', height: '100%', background: 'var(--mc-bg)', display: 'flex', flexDirection: 'column',
        overflow: 'hidden',
      }}>
        {/* Header */}
        <div style={{ padding: '20px 40px 14px', borderBottom: '1px solid var(--mc-rule)', background: 'var(--mc-surface)' }}>
          <div style={{ maxWidth: 1400, margin: '0 auto' }}>
            <button onClick={onClose} style={{
              display: 'inline-flex', alignItems: 'center', gap: 6, padding: '5px 10px',
              background: 'transparent', border: '1px solid var(--mc-rule)', color: 'var(--mc-ink-muted)',
              fontSize: 11, cursor: 'pointer', fontFamily: 'inherit', marginBottom: 12,
            }}>← Zurück zur Event-Übersicht</button>
            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: 14, gap: 20 }}>
              <div style={{ flex: 1 }}>
                <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
                  <Pill tone={stateMeta.tone}>{stateMeta.label}</Pill>
                  <span className="mc-eyebrow">{event.type}</span>
                </div>
                <div style={{ fontSize: 32, fontWeight: 500, letterSpacing: '-0.02em', marginTop: 8 }}>{event.name}</div>
                <div style={{ fontSize: 14, color: 'var(--mc-ink-dim)', marginTop: 4 }}>
                  {fmtEventDate(event.date)} · {event.startTime}—{event.endTime} · {event.venue} · {event.guests} Gäste
                </div>
              </div>
              <button onClick={() => setShowOffer(true)} className="mc-btn ghost sm">
                <McIcon2 name="arrow" size={12} />Angebot als PDF
              </button>
            </div>

            <div style={{ display: 'flex', gap: 8, flexWrap: 'wrap' }}>
              {EVENT_STATES.map(s => (
                <button key={s.id} onClick={() => changeState(s.id)} style={{
                  padding: '5px 10px', fontSize: 11, border: '1px solid var(--mc-rule)', cursor: 'pointer',
                  fontFamily: 'inherit',
                  background: event.state === s.id ? 'var(--mc-leaf)' : 'transparent',
                  color: event.state === s.id ? '#1B1B17' : 'var(--mc-ink-muted)',
                }}>{s.order}. {s.label}</button>
              ))}
            </div>
          </div>
        </div>

        {/* Tabs */}
        <div style={{ borderBottom: '1px solid var(--mc-rule)', padding: '0 40px', display: 'flex', gap: 0, flexShrink: 0 }}>
          <div style={{ maxWidth: 1400, margin: '0 auto', width: '100%', display: 'flex' }}>
          {tabs.map(t2 => (
            <button key={t2.id} onClick={() => setTab(t2.id)} style={{
              padding: '12px 14px', background: 'transparent', border: 'none',
              borderBottom: tab === t2.id ? '2px solid var(--mc-leaf)' : '2px solid transparent',
              color: tab === t2.id ? 'var(--mc-ink)' : 'var(--mc-ink-muted)',
              fontSize: 12, fontWeight: tab === t2.id ? 500 : 400, cursor: 'pointer',
              fontFamily: "'Space Grotesk', sans-serif",
            }}>{t2.label}</button>
          ))}
          </div>
        </div>

        {/* Body */}
        <div className="mc-scroll" style={{ flex: 1, overflow: 'auto' }}>
          <div style={{ maxWidth: 1400, margin: '0 auto' }}>
            {tab === 'overview'  && <OverviewTab event={event} staff={staff} totals={t} />}
            {tab === 'menu'      && <MenuTab     event={event} totals={t} />}
            {tab === 'team'      && <TeamTab     event={event} staff={staff} totals={t} />}
            {tab === 'equipment' && <EquipmentTab event={event} totals={t} />}
            {tab === 'timeline'  && <TimelineTab event={event} />}
          </div>
        </div>

        {/* Footer summary */}
        <div style={{ padding: '16px 40px', background: 'var(--mc-surface)', borderTop: '1px solid var(--mc-rule)' }}>
          <div style={{ maxWidth: 1400, margin: '0 auto', display: 'grid', gridTemplateColumns: '1fr 1fr 1fr 1fr', gap: 20 }}>
            <SumItem label="Umsatz" value={fmtEUR(t.revenue)} />
            <SumItem label="Kosten" value={fmtEUR(t.totalCost)} dim />
            <SumItem label="Deckungsbeitrag" value={fmtEUR(t.profit)} tone="leaf" />
            <SumItem label="Marge" value={t.margin.toFixed(1) + '%'} tone={t.margin >= 30 ? 'leaf' : t.margin >= 20 ? 'default' : 'ember'} />
          </div>
        </div>

        {showOffer && <OfferPreview event={event} totals={t} staff={staff} onClose={() => setShowOffer(false)} />}
      </div>
    </div>
  );
}

function SumItem({ label, value, tone, dim }) {
  const color = tone === 'leaf' ? 'var(--mc-leaf-700)' : tone === 'ember' ? 'var(--mc-ember-700)' : dim ? 'var(--mc-ink-dim)' : 'var(--mc-ink)';
  return (
    <div>
      <div className="mc-eyebrow">{label}</div>
      <div className="mc-num" style={{ fontSize: 18, fontWeight: 500, marginTop: 4, color }}>{value}</div>
    </div>
  );
}

// ─── Overview tab ─────────────────────────────────────────────────────────────
function OverviewTab({ event, staff, totals }) {
  const lead = staff.find(s => s.id === event.lead);
  const [notes, setNotes] = React.useState(event.notes || '');
  React.useEffect(() => setNotes(event.notes || ''), [event.id]);
  const saveNotes = () => mcApi.patch('/events/' + event.id, { notes });
  const outstanding = totals.revenue - (event.paidTotal || 0);

  return (
    <div style={{ padding: 24, display: 'flex', flexDirection: 'column', gap: 18 }}>
      {/* Kunde */}
      <div className="mc-card" style={{ padding: 20 }}>
        <div className="mc-eyebrow">Kunde</div>
        <div style={{ fontSize: 17, fontWeight: 500, marginTop: 6 }}>{event.customer.name}</div>
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 14, marginTop: 14 }}>
          <InfoRow label="Ansprechpartner" value={event.customer.contact} />
          <InfoRow label="Telefon" value={event.customer.phone} mono />
          <InfoRow label="E-Mail" value={event.customer.email} mono />
          <InfoRow label="Event-Lead" value={lead?.name || '—'} />
        </div>
      </div>

      {/* Venue + Zeiten */}
      <div style={{ display: 'grid', gridTemplateColumns: '1.4fr 1fr', gap: 14 }}>
        <div className="mc-card" style={{ padding: 20 }}>
          <div className="mc-eyebrow">Veranstaltungsort</div>
          <div style={{ fontSize: 14, fontWeight: 500, marginTop: 6 }}>{event.venue}</div>
          <div style={{ fontSize: 12, color: 'var(--mc-ink-dim)', marginTop: 2 }}>{event.address}</div>
          <div style={{ marginTop: 14, padding: 10, background: 'var(--mc-surface-2)', fontSize: 12, color: 'var(--mc-ink-muted)' }}>
            {daysUntil(event.date) > 0
              ? `Noch ${daysUntil(event.date)} Tage bis zum Event`
              : daysUntil(event.date) === 0
              ? 'Heute · Tag des Events'
              : `Vor ${Math.abs(daysUntil(event.date))} Tagen stattgefunden`}
          </div>
        </div>
        <div className="mc-card" style={{ padding: 20 }}>
          <div className="mc-eyebrow">Finanzen</div>
          <div style={{ display: 'flex', flexDirection: 'column', gap: 10, marginTop: 10 }}>
            <FinRow label="Gesamt" value={fmtEUR(totals.revenue)} bold />
            <FinRow label="Anzahlung" value={fmtEUR(event.deposit)} badge={event.depositPaid ? 'leaf' : 'ember'} badgeLabel={event.depositPaid ? 'Bezahlt' : 'Offen'} />
            <FinRow label="Bereits bezahlt" value={fmtEUR(event.paidTotal || 0)} />
            <FinRow label="Offener Betrag" value={fmtEUR(outstanding)} tone={outstanding > 0 ? 'ember' : 'leaf'} bold />
          </div>
        </div>
      </div>

      {/* Zusammensetzung */}
      <div className="mc-card" style={{ padding: 20 }}>
        <div className="mc-eyebrow">Zusammensetzung der Kalkulation</div>
        <div style={{ display: 'flex', marginTop: 12, height: 10, borderRadius: 2, overflow: 'hidden', border: '1px solid var(--mc-rule)' }}>
          <div style={{ width: `${(totals.foodCost/totals.revenue)*100}%`,  background: 'var(--mc-ember)' }} title="Food-Cost" />
          <div style={{ width: `${(totals.laborCost/totals.revenue)*100}%`, background: 'var(--mc-azure, #7BB0BD)' }} title="Personal" />
          <div style={{ width: `${(totals.rentalCost/totals.revenue)*100}%`, background: '#564F47' }} title="Equipment" />
          <div style={{ flex: 1, background: 'var(--mc-leaf)' }} title="Deckungsbeitrag" />
        </div>
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 14, marginTop: 14 }}>
          <LegendDot color="var(--mc-ember)" label="Food" value={fmtEUR(totals.foodCost)} pct={(totals.foodCost/totals.revenue)*100} />
          <LegendDot color="#7BB0BD" label="Personal" value={fmtEUR(totals.laborCost)} pct={(totals.laborCost/totals.revenue)*100} />
          <LegendDot color="#564F47" label="Equipment" value={fmtEUR(totals.rentalCost)} pct={(totals.rentalCost/totals.revenue)*100} />
          <LegendDot color="var(--mc-leaf)" label="Deckungsbeitrag" value={fmtEUR(totals.profit)} pct={totals.margin} />
        </div>
      </div>

      {/* Notes */}
      <div className="mc-card" style={{ padding: 20 }}>
        <div className="mc-eyebrow">Notizen</div>
        <textarea
          value={notes}
          onChange={e => setNotes(e.target.value)}
          onBlur={saveNotes}
          rows={4}
          style={{
            width: '100%', marginTop: 10, padding: 12, fontFamily: 'inherit', fontSize: 13,
            border: '1px solid var(--mc-rule)', background: 'var(--mc-surface)', color: 'var(--mc-ink)',
            resize: 'vertical',
          }}
          placeholder="Allergien, Dresscode, Ablaufhinweise, VIP-Gäste …"
        />
      </div>
    </div>
  );
}

function InfoRow({ label, value, mono }) {
  return (
    <div>
      <div className="mc-eyebrow" style={{ marginBottom: 3 }}>{label}</div>
      <div style={{ fontSize: 13, fontFamily: mono ? "'JetBrains Mono', monospace" : 'inherit' }}>{value}</div>
    </div>
  );
}
function FinRow({ label, value, bold, tone, badge, badgeLabel }) {
  const color = tone === 'ember' ? 'var(--mc-ember-700)' : tone === 'leaf' ? 'var(--mc-leaf-700)' : 'var(--mc-ink)';
  return (
    <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
      <div style={{ fontSize: 12, color: 'var(--mc-ink-muted)' }}>{label} {badge && <Pill tone={badge} style={{ marginLeft: 6 }}>{badgeLabel}</Pill>}</div>
      <div className="mc-num" style={{ fontSize: 14, fontWeight: bold ? 600 : 400, color }}>{value}</div>
    </div>
  );
}
function LegendDot({ color, label, value, pct }) {
  return (
    <div>
      <div style={{ display: 'flex', gap: 6, alignItems: 'center' }}>
        <div style={{ width: 10, height: 10, background: color }} />
        <div className="mc-eyebrow">{label}</div>
      </div>
      <div className="mc-num" style={{ fontSize: 15, fontWeight: 500, marginTop: 4 }}>{value}</div>
      <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)' }}>{pct.toFixed(1)}% vom Umsatz</div>
    </div>
  );
}

// ─── Menu tab ─────────────────────────────────────────────────────────────────
function MenuTab({ event, totals }) {
  const guests = event.guests;

  const updateItem = (mid, itemName, body) => {
    mcApi.patch(`/events/${event.id}/menu/${mid}/items/${encodeURIComponent(itemName)}`, body);
  };

  return (
    <div style={{ padding: 24, display: 'flex', flexDirection: 'column', gap: 14 }}>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 12 }}>
        <KpiCard label={`Umsatz pro Person (${guests} Gäste)`}  value={fmtEUR(totals.revenue / guests)} tone="leaf" />
        <KpiCard label="Food-Cost pro Person"                   value={fmtEUR(totals.foodCost / guests)} tone="ember" />
        <KpiCard label="Food-Cost %"                             value={((totals.foodCost/totals.revenue)*100).toFixed(1)+'%'} sub="Ziel ≤ 28%" />
      </div>

      {event.menu.map(course => {
        const courseRevenue = course.items.reduce((s, i) => s + i.qtyPerPerson * i.unitPrice * guests, 0);
        const courseCost    = course.items.reduce((s, i) => s + i.qtyPerPerson * i.unitCost  * guests, 0);
        return (
          <div key={course.id} className="mc-card" style={{ overflow: 'hidden' }}>
            <div style={{ padding: '14px 18px', background: 'var(--mc-surface-2)', borderBottom: '1px solid var(--mc-rule)', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
              <div>
                <div className="mc-eyebrow">Gang</div>
                <div style={{ fontSize: 15, fontWeight: 500, marginTop: 2 }}>{course.course}</div>
              </div>
              <div style={{ textAlign: 'right' }}>
                <div className="mc-num" style={{ fontSize: 16, fontWeight: 500 }}>{fmtEUR(courseRevenue)}</div>
                <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)' }}>Kosten {fmtEUR(courseCost)}</div>
              </div>
            </div>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 80px 80px 80px 90px', padding: '10px 18px', borderBottom: '1px solid var(--mc-rule)', gap: 8, background: 'var(--mc-bg)' }}>
              <div className="mc-eyebrow">Position</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Menge/P</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Kosten</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Preis</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Summe</div>
            </div>
            {course.items.map((i) => {
              const sum = i.qtyPerPerson * i.unitPrice * guests;
              return (
                <div key={i.name} style={{ display: 'grid', gridTemplateColumns: '1fr 80px 80px 80px 90px', padding: '12px 18px', borderBottom: '1px solid var(--mc-rule)', gap: 8, alignItems: 'center', fontSize: 13 }}>
                  <div>{i.name}</div>
                  <input type="number" step="0.5" value={i.qtyPerPerson} onChange={e => updateItem(course.id, i.name, { qtyPerPerson: parseFloat(e.target.value) || 0 })} style={smallNum} />
                  <input type="number" step="0.10" value={i.unitCost}    onChange={e => updateItem(course.id, i.name, { unitCost:    parseFloat(e.target.value) || 0 })} style={smallNum} />
                  <input type="number" step="0.10" value={i.unitPrice}   onChange={e => updateItem(course.id, i.name, { unitPrice:   parseFloat(e.target.value) || 0 })} style={smallNum} />
                  <div className="mc-num" style={{ textAlign: 'right', fontWeight: 500 }}>{fmtEUR(sum)}</div>
                </div>
              );
            })}
          </div>
        );
      })}
    </div>
  );
}

const smallNum = {
  padding: '5px 8px', border: '1px solid var(--mc-rule)', textAlign: 'right',
  fontFamily: "'JetBrains Mono', monospace", fontSize: 12,
  background: 'var(--mc-surface)', color: 'var(--mc-ink)',
};

// ─── Team tab ─────────────────────────────────────────────────────────────────
function TeamTab({ event, staff, totals }) {
  const updateMember = (tmId, body) => mcApi.patch(`/events/${event.id}/team/${tmId}`, body);

  const plannedHoursTotal = event.team.reduce((s, t) => s + t.hours, 0);
  const actualHoursTotal  = event.team.reduce((s, t) => s + (t.hoursActual != null ? t.hoursActual : t.hours), 0);
  const delta             = actualHoursTotal - plannedHoursTotal;
  const plannedCost       = totals.laborPlanned;
  const actualCost        = totals.laborCost;
  const costDelta         = actualCost - plannedCost;

  const isPast = new Date(event.date) < new Date(new Date().setHours(0,0,0,0));

  return (
    <div style={{ padding: 24, display: 'flex', flexDirection: 'column', gap: 14 }}>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 12 }}>
        <KpiCard label="Team-Größe"           value={event.team.length + ' Personen'} />
        <KpiCard label="Plan-Stunden"         value={plannedHoursTotal + ' h'} />
        <KpiCard
          label={isPast ? 'Ist-Stunden' : 'Ist (prognostiziert)'}
          value={actualHoursTotal + ' h'}
          tone={delta > 0 ? 'ember' : delta < 0 ? 'leaf' : 'default'}
          sub={delta !== 0 ? `${delta > 0 ? '+' : ''}${delta.toFixed(1)}h ggü. Plan` : 'wie geplant'}
        />
        <KpiCard
          label="Personalkosten (Ist)"
          value={fmtEUR(actualCost)}
          tone="ember"
          sub={costDelta !== 0 ? `${costDelta > 0 ? '+' : ''}${fmtEUR(costDelta)} ggü. Plan` : `${((actualCost/totals.revenue)*100).toFixed(1)}% vom Umsatz`}
        />
      </div>

      <div className="mc-card">
        <div style={{
          display: 'grid',
          gridTemplateColumns: '2fr 140px 70px 70px 32px 80px 120px',
          padding: '12px 20px', background: 'var(--mc-surface-2)', borderBottom: '1px solid var(--mc-rule)',
          gap: 10, alignItems: 'center',
        }}>
          <div className="mc-eyebrow">Mitarbeiter</div>
          <div className="mc-eyebrow">Rolle</div>
          <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Plan h</div>
          <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Ist h</div>
          <div className="mc-eyebrow" style={{ textAlign: 'center' }} title="Abrechnen?">Abr.</div>
          <div className="mc-eyebrow" style={{ textAlign: 'right' }}>€/Std.</div>
          <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Kosten</div>
        </div>

        {event.team.map(tm => {
          const u = staff.find(s => s.id === tm.uid);
          const actual = tm.hoursActual != null ? tm.hoursActual : tm.hours;
          const billable = tm.billable !== false; // default true
          const hoursForCost = billable ? actual : tm.hours;
          const cost = hoursForCost * tm.ratePerHour;
          const rowDelta = actual - tm.hours;
          return (
            <div key={tm.id} style={{
              display: 'grid',
              gridTemplateColumns: '2fr 140px 70px 70px 32px 80px 120px',
              padding: '14px 20px', borderBottom: '1px solid var(--mc-rule)',
              alignItems: 'center', gap: 10,
            }}>
              <div style={{ display: 'flex', gap: 10, alignItems: 'center', minWidth: 0 }}>
                <div style={{ width: 30, height: 30, background: u?.color, color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 11, fontWeight: 600, flexShrink: 0 }}>
                  {u?.name.split(' ').map(n=>n[0]).join('').slice(0,2)}
                </div>
                <div style={{ minWidth: 0 }}>
                  <div style={{ fontSize: 13, fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{u?.name}</div>
                  <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)' }}>{u?.role}</div>
                </div>
              </div>
              <div style={{ fontSize: 12, color: 'var(--mc-ink-muted)' }}>{tm.role}</div>
              <input
                type="number" step="0.5" value={tm.hours}
                onChange={e => updateMember(tm.id, { hours: parseFloat(e.target.value) || 0 })}
                style={smallNum}
                title="Geplante Stunden"
              />
              <input
                type="number" step="0.25" value={actual}
                onChange={e => updateMember(tm.id, { hoursActual: parseFloat(e.target.value) || 0 })}
                style={{
                  ...smallNum,
                  color: rowDelta > 0 ? 'var(--mc-ember-700)' : rowDelta < 0 ? 'var(--mc-leaf-700)' : 'var(--mc-ink)',
                  fontWeight: rowDelta !== 0 ? 500 : 400,
                }}
                title="Tatsächliche Stunden (für Abrechnung)"
              />
              <label style={{ display: 'flex', justifyContent: 'center', cursor: 'pointer' }} title="Ist-Stunden abrechnen">
                <input
                  type="checkbox"
                  checked={billable}
                  onChange={e => updateMember(tm.id, { billable: e.target.checked })}
                  style={{ accentColor: 'var(--mc-leaf-700)', cursor: 'pointer' }}
                />
              </label>
              <input
                type="number" step="1" value={tm.ratePerHour}
                onChange={e => updateMember(tm.id, { ratePerHour: parseFloat(e.target.value) || 0 })}
                style={smallNum}
              />
              <div className="mc-num" style={{ textAlign: 'right', fontSize: 13, fontWeight: 500 }}>
                {fmtEUR(cost)}
                {rowDelta !== 0 && billable && (
                  <div style={{ fontSize: 9, fontWeight: 400, color: rowDelta > 0 ? 'var(--mc-ember-700)' : 'var(--mc-leaf-700)' }}>
                    {rowDelta > 0 ? '+' : ''}{fmtEUR(rowDelta * tm.ratePerHour)}
                  </div>
                )}
              </div>
            </div>
          );
        })}

        <div style={{ padding: '14px 20px', background: 'var(--mc-surface)' }}>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 20 }}>
            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline' }}>
              <div style={{ fontSize: 12, color: 'var(--mc-ink-muted)' }}>Geplant</div>
              <div className="mc-num" style={{ fontSize: 14 }}>{plannedHoursTotal}h · {fmtEUR(plannedCost)}</div>
            </div>
            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline' }}>
              <div style={{ fontSize: 12, fontWeight: 500 }}>Abrechnung</div>
              <div className="mc-num" style={{ fontSize: 15, fontWeight: 600 }}>
                {actualHoursTotal}h · {fmtEUR(actualCost)}
                {costDelta !== 0 && <span style={{ fontSize: 11, fontWeight: 400, marginLeft: 8, color: costDelta > 0 ? 'var(--mc-ember-700)' : 'var(--mc-leaf-700)' }}>
                  ({costDelta > 0 ? '+' : ''}{fmtEUR(costDelta)})
                </span>}
              </div>
            </div>
          </div>
        </div>
      </div>

      <div style={{ padding: '12px 16px', background: 'var(--mc-surface-2)', fontSize: 11, color: 'var(--mc-ink-muted)', lineHeight: 1.6 }}>
        <strong style={{ color: 'var(--mc-ink)' }}>So funktioniert's:</strong> „Plan h" ist die im Angebot kalkulierte Zeit.
        „Ist h" wird nach dem Event auf die tatsächlich geleistete Zeit gesetzt — die Differenz fließt automatisch in die Abrechnung.
        Die Checkbox „Abr." deaktiviert die Differenz-Abrechnung (z.B. bei Kulanz oder Pauschalpreisen).
      </div>
    </div>
  );
}

// ─── Equipment tab ────────────────────────────────────────────────────────────
function EquipmentTab({ event, totals }) {
  const update = (id, body) => mcApi.patch(`/events/${event.id}/equipment/${id}`, body);
  const bySupplier = event.equipment.reduce((acc, q) => {
    (acc[q.supplier] ||= []).push(q);
    return acc;
  }, {});

  return (
    <div style={{ padding: 24, display: 'flex', flexDirection: 'column', gap: 14 }}>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 12 }}>
        <KpiCard label="Equipment-Positionen" value={event.equipment.length} />
        <KpiCard label="Lieferanten" value={Object.keys(bySupplier).length} />
        <KpiCard label="Miet-Kosten" value={fmtEUR(totals.rentalCost)} tone="ember" sub={`${((totals.rentalCost/totals.revenue)*100).toFixed(1)}% vom Umsatz`} />
      </div>

      {Object.entries(bySupplier).map(([supplier, items]) => {
        const subTotal = items.reduce((s, q) => s + q.qty * q.unitCost, 0);
        return (
          <div key={supplier} className="mc-card">
            <div style={{ padding: '12px 20px', background: 'var(--mc-surface-2)', borderBottom: '1px solid var(--mc-rule)', display: 'flex', justifyContent: 'space-between' }}>
              <div>
                <div className="mc-eyebrow">Lieferant</div>
                <div style={{ fontSize: 14, fontWeight: 500, marginTop: 2 }}>{supplier}</div>
              </div>
              <div style={{ textAlign: 'right' }}>
                <div className="mc-num" style={{ fontSize: 15, fontWeight: 500 }}>{fmtEUR(subTotal)}</div>
                <div style={{ fontSize: 10, color: 'var(--mc-ink-dim)' }}>{items.length} Position{items.length !== 1 ? 'en' : ''}</div>
              </div>
            </div>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 80px 90px 110px', padding: '10px 20px', borderBottom: '1px solid var(--mc-rule)', gap: 8 }}>
              <div className="mc-eyebrow">Position</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Menge</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Einzel</div>
              <div className="mc-eyebrow" style={{ textAlign: 'right' }}>Summe</div>
            </div>
            {items.map(q => (
              <div key={q.id} style={{ display: 'grid', gridTemplateColumns: '1fr 80px 90px 110px', padding: '12px 20px', borderBottom: '1px solid var(--mc-rule)', alignItems: 'center', gap: 8, fontSize: 13 }}>
                <div>{q.item}</div>
                <input type="number" step="1" value={q.qty} onChange={e => update(q.id, { qty: parseInt(e.target.value) || 0 })} style={smallNum} />
                <input type="number" step="0.50" value={q.unitCost} onChange={e => update(q.id, { unitCost: parseFloat(e.target.value) || 0 })} style={smallNum} />
                <div className="mc-num" style={{ textAlign: 'right', fontWeight: 500 }}>{fmtEUR(q.qty * q.unitCost)}</div>
              </div>
            ))}
          </div>
        );
      })}
    </div>
  );
}

// ─── Timeline tab ─────────────────────────────────────────────────────────────
function TimelineTab({ event }) {
  const store = useStore();
  const template = store.eventTimelineTemplate || [];

  const toggle = (tkey) => mcApi.patch(`/events/${event.id}/timeline/${tkey}`, { done: !event.timeline[tkey] });

  const done = template.filter(t => event.timeline[t.id]).length;
  const progressPct = (done / template.length) * 100;

  const groupTone = {
    Verkauf: 'var(--mc-ember-700)', Finanzen: '#1B1B17',
    Küche: 'var(--mc-leaf-700)', Personal: '#7BB0BD',
    Logistik: '#564F47', Service: 'var(--mc-ember-700)',
  };

  return (
    <div style={{ padding: 24, display: 'flex', flexDirection: 'column', gap: 18 }}>
      <div className="mc-card" style={{ padding: 20 }}>
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 10 }}>
          <div>
            <div className="mc-eyebrow">Fortschritt</div>
            <div style={{ fontSize: 17, fontWeight: 500, marginTop: 4 }}>{done} von {template.length} Schritten</div>
          </div>
          <div className="mc-num" style={{ fontSize: 26, fontWeight: 500, color: 'var(--mc-leaf-700)' }}>{progressPct.toFixed(0)}%</div>
        </div>
        <div style={{ height: 6, background: 'var(--mc-rule)', position: 'relative' }}>
          <div style={{ position: 'absolute', left: 0, top: 0, bottom: 0, width: progressPct + '%', background: 'var(--mc-leaf-700)' }} />
        </div>
      </div>

      <div style={{ position: 'relative', paddingLeft: 24 }}>
        <div style={{ position: 'absolute', left: 10, top: 10, bottom: 10, width: 2, background: 'var(--mc-rule)' }} />
        {template.map((t, idx) => {
          const isDone = !!event.timeline[t.id];
          const color = groupTone[t.group] || 'var(--mc-ink-muted)';
          return (
            <div key={t.id} style={{ position: 'relative', paddingBottom: 16, display: 'flex', gap: 14, alignItems: 'center' }}>
              <div style={{
                position: 'absolute', left: -24, top: 4, width: 22, height: 22, borderRadius: '50%',
                background: isDone ? 'var(--mc-leaf-700)' : 'var(--mc-bg)',
                border: isDone ? '2px solid var(--mc-leaf-700)' : '2px solid var(--mc-rule)',
                display: 'flex', alignItems: 'center', justifyContent: 'center',
                color: '#fff', fontSize: 12,
              }}>
                {isDone ? '✓' : ''}
              </div>
              <div className="mc-card" style={{ padding: '14px 18px', flex: 1, cursor: 'pointer', opacity: isDone ? 0.75 : 1 }} onClick={() => toggle(t.id)}>
                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
                  <div>
                    <div style={{ fontSize: 10, textTransform: 'uppercase', letterSpacing: '.12em', color }}>{t.group}</div>
                    <div style={{ fontSize: 14, fontWeight: 500, marginTop: 3, textDecoration: isDone ? 'line-through' : 'none' }}>{t.label}</div>
                  </div>
                  <div style={{ fontSize: 11, color: isDone ? 'var(--mc-leaf-700)' : 'var(--mc-ink-muted)' }}>
                    {isDone ? 'Erledigt' : 'Offen · Klick zum Abhaken'}
                  </div>
                </div>
              </div>
            </div>
          );
        })}
      </div>
    </div>
  );
}

// ─── Offer PDF Preview ────────────────────────────────────────────────────────
function OfferPreview({ event, totals, staff, onClose }) {
  const lead = staff.find(s => s.id === event.lead);
  return (
    <div onClick={onClose} style={{ position: 'absolute', inset: 0, background: 'rgba(27,27,23,.8)', zIndex: 600, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 40 }}>
      <div onClick={e => e.stopPropagation()} style={{
        width: 640, maxHeight: '92vh', background: '#F4EFE2', color: '#1B1B17',
        overflow: 'auto', boxShadow: '0 24px 70px rgba(0,0,0,.4)',
      }}>
        {/* Letterhead */}
        <div style={{ padding: '28px 40px 20px', borderBottom: '2px solid #1B1B17' }}>
          <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>
            <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
              <div style={{ width: 44, height: 44, background: '#AEC854' }} />
              <div>
                <div style={{ fontSize: 18, fontWeight: 600, fontFamily: "'Space Grotesk', sans-serif", letterSpacing: '-0.015em' }}>Osteria Botanica</div>
                <div style={{ fontSize: 10, color: '#564F47', marginTop: 2 }}>Illerstraße 14 · 87435 Kempten</div>
              </div>
            </div>
            <div style={{ textAlign: 'right' }}>
              <div style={{ fontSize: 10, textTransform: 'uppercase', letterSpacing: '.15em', color: '#8A8178' }}>Angebot</div>
              <div className="mc-mono" style={{ fontSize: 13, marginTop: 4 }}>AN-2026-{event.id.slice(2).padStart(4, '0')}</div>
              <div className="mc-mono" style={{ fontSize: 10, color: '#8A8178' }}>{new Date().toLocaleDateString('de-DE')}</div>
            </div>
          </div>
        </div>

        {/* Addressee */}
        <div style={{ padding: '20px 40px', fontSize: 12, lineHeight: 1.7 }}>
          <div style={{ fontSize: 10, color: '#8A8178', textTransform: 'uppercase', letterSpacing: '.1em', marginBottom: 6 }}>Kunde</div>
          <div><strong>{event.customer.name}</strong></div>
          <div>{event.customer.contact}</div>
        </div>

        {/* Event */}
        <div style={{ padding: '0 40px 20px' }}>
          <div style={{ fontSize: 20, fontWeight: 500, marginBottom: 12, letterSpacing: '-0.015em' }}>{event.name}</div>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 14, fontSize: 12 }}>
            <div><strong>Datum:</strong> {fmtEventDate(event.date)}</div>
            <div><strong>Zeit:</strong> {event.startTime}—{event.endTime}</div>
            <div><strong>Gäste:</strong> {event.guests} Personen</div>
            <div><strong>Format:</strong> {event.type}</div>
            <div style={{ gridColumn: '1 / -1' }}><strong>Ort:</strong> {event.venue}, {event.address}</div>
          </div>
        </div>

        {/* Menu */}
        <div style={{ padding: '20px 40px', borderTop: '1px solid #D1C9B8' }}>
          <div style={{ fontSize: 10, color: '#8A8178', textTransform: 'uppercase', letterSpacing: '.1em', marginBottom: 14 }}>Menü & Leistungen</div>
          {event.menu.map(course => {
            const sum = course.items.reduce((s,i) => s + i.qtyPerPerson * i.unitPrice * event.guests, 0);
            return (
              <div key={course.id} style={{ marginBottom: 16 }}>
                <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 6, paddingBottom: 4, borderBottom: '1px solid #D1C9B8' }}>
                  <div style={{ fontSize: 13, fontWeight: 600 }}>{course.course}</div>
                  <div className="mc-mono" style={{ fontSize: 12, fontWeight: 500 }}>{fmtEUR(sum)}</div>
                </div>
                {course.items.map(i => (
                  <div key={i.name} style={{ display: 'flex', justifyContent: 'space-between', fontSize: 11, color: '#564F47', padding: '3px 0' }}>
                    <div>{i.name} <span style={{ color: '#8A8178' }}>({i.qtyPerPerson}/P · {fmtEUR(i.unitPrice)})</span></div>
                    <div className="mc-mono">{fmtEUR(i.qtyPerPerson * i.unitPrice * event.guests)}</div>
                  </div>
                ))}
              </div>
            );
          })}
        </div>

        {/* Total */}
        <div style={{ padding: '20px 40px', borderTop: '2px solid #1B1B17', background: '#EEE6D1' }}>
          <div style={{ display: 'flex', justifyContent: 'space-between', fontSize: 12, marginBottom: 4 }}>
            <div>Netto</div><div className="mc-mono">{fmtEUR(totals.revenue)}</div>
          </div>
          <div style={{ display: 'flex', justifyContent: 'space-between', fontSize: 12, marginBottom: 10, color: '#564F47' }}>
            <div>zzgl. 19% USt</div><div className="mc-mono">{fmtEUR(totals.revenue * 0.19)}</div>
          </div>
          <div style={{ display: 'flex', justifyContent: 'space-between', fontSize: 18, fontWeight: 600, paddingTop: 10, borderTop: '1px solid #1B1B17' }}>
            <div>Gesamt</div><div className="mc-mono">{fmtEUR(totals.revenue * 1.19)}</div>
          </div>
        </div>

        {/* Conditions */}
        <div style={{ padding: '20px 40px', fontSize: 10, color: '#564F47', lineHeight: 1.6 }}>
          Angebot gültig 14 Tage · Anzahlung 30% bei Auftragsbestätigung · Restzahlung 7 Tage nach Event ·
          Bei Stornierung &lt; 14 Tage vor Event fallen 50% des Auftragswerts an.
          <br/><br/>
          Ansprechpartner: {lead?.name || 'Paul Wagner'} · Osteria Botanica · +49 831 512 06 00
        </div>

        {/* Actions */}
        <div style={{ padding: '14px 40px', borderTop: '1px solid #D1C9B8', display: 'flex', justifyContent: 'space-between', gap: 10, background: '#F4EFE2' }}>
          <button onClick={onClose} className="mc-btn ghost sm" style={{ color: '#1B1B17', borderColor: '#1B1B17' }}>Schließen</button>
          <div style={{ display: 'flex', gap: 10 }}>
            <button className="mc-btn ghost sm" style={{ color: '#1B1B17', borderColor: '#1B1B17' }}>Drucken</button>
            <button className="mc-btn leaf sm">Per E-Mail senden</button>
          </div>
        </div>
      </div>
    </div>
  );
}

// ─── New Event Modal ──────────────────────────────────────────────────────────
function NewEventModal({ onClose }) {
  const [form, setForm] = React.useState({
    name: '', customer: { name: '', contact: '', email: '', phone: '' },
    date: new Date(Date.now() + 30*86400000).toISOString().slice(0,10),
    startTime: '19:00', endTime: '23:30',
    guests: 50, venue: '', address: '', type: 'Set-Menu 4-Gang', lead: 'u1',
  });
  const [step, setStep] = React.useState(0);
  const store = useStore();

  const types = ['Set-Menu 4-Gang', 'Set-Menu 5-Gang', 'Family Style', 'Flying Buffet', 'Food-Station', 'Cocktail-Empfang'];

  const save = () => {
    mcApi.post('/events', form);
    onClose();
  };

  return (
    <div onClick={onClose} style={{ position: 'absolute', inset: 0, background: 'rgba(27,27,23,.55)', zIndex: 500, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
      <div onClick={e => e.stopPropagation()} style={{ width: 560, background: 'var(--mc-bg)', padding: 28, boxShadow: '0 20px 50px rgba(0,0,0,.3)' }}>
        <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 20 }}>
          <div>
            <div className="mc-eyebrow">Neues Event · Angebot erstellen</div>
            <div style={{ fontSize: 20, fontWeight: 500, marginTop: 4 }}>Event anlegen</div>
          </div>
          <button onClick={onClose} className="mc-btn ghost sm">×</button>
        </div>

        <div style={{ display: 'flex', flexDirection: 'column', gap: 14 }}>
          <div>
            <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Event-Name</div>
            <input value={form.name} onChange={e => setForm({...form, name: e.target.value})} placeholder="z.B. Hochzeit Müller" style={fullInput} />
          </div>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Kunde</div>
              <input value={form.customer.name} onChange={e => setForm({...form, customer: {...form.customer, name: e.target.value}})} placeholder="Firma / Familie" style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Ansprechpartner</div>
              <input value={form.customer.contact} onChange={e => setForm({...form, customer: {...form.customer, contact: e.target.value}})} placeholder="Vor- und Nachname" style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>E-Mail</div>
              <input value={form.customer.email} onChange={e => setForm({...form, customer: {...form.customer, email: e.target.value}})} style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Telefon</div>
              <input value={form.customer.phone} onChange={e => setForm({...form, customer: {...form.customer, phone: e.target.value}})} style={fullInput} />
            </div>
          </div>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 12 }}>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Datum</div>
              <input type="date" value={form.date} onChange={e => setForm({...form, date: e.target.value})} style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Start</div>
              <input type="time" value={form.startTime} onChange={e => setForm({...form, startTime: e.target.value})} style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Ende</div>
              <input type="time" value={form.endTime} onChange={e => setForm({...form, endTime: e.target.value})} style={fullInput} />
            </div>
          </div>
          <div style={{ display: 'grid', gridTemplateColumns: '100px 1fr', gap: 12 }}>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Gäste</div>
              <input type="number" value={form.guests} onChange={e => setForm({...form, guests: parseInt(e.target.value) || 0})} style={fullInput} />
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Veranstaltungsort</div>
              <input value={form.venue} onChange={e => setForm({...form, venue: e.target.value})} placeholder="z.B. Schlossgarten" style={fullInput} />
            </div>
          </div>
          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12 }}>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Format</div>
              <select value={form.type} onChange={e => setForm({...form, type: e.target.value})} style={fullInput}>
                {types.map(t => <option key={t}>{t}</option>)}
              </select>
            </div>
            <div>
              <div className="mc-eyebrow" style={{ marginBottom: 6 }}>Event-Lead</div>
              <select value={form.lead} onChange={e => setForm({...form, lead: e.target.value})} style={fullInput}>
                {store.staff.filter(s => s.status !== 'offboarded').map(s => <option key={s.id} value={s.id}>{s.name}</option>)}
              </select>
            </div>
          </div>
        </div>

        <div style={{ display: 'flex', gap: 10, marginTop: 24, justifyContent: 'space-between' }}>
          <div style={{ fontSize: 11, color: 'var(--mc-ink-dim)' }}>
            Menü, Team und Equipment werden anschließend im Detail gepflegt.
          </div>
          <div style={{ display: 'flex', gap: 8 }}>
            <button onClick={onClose} className="mc-btn ghost">Abbrechen</button>
            <button onClick={save} className="mc-btn leaf" disabled={!form.name || !form.customer.name}>Event anlegen</button>
          </div>
        </div>
      </div>
    </div>
  );
}

const fullInput = {
  width: '100%', padding: '9px 11px', border: '1px solid var(--mc-rule)',
  background: 'var(--mc-surface)', color: 'var(--mc-ink)',
  fontFamily: "'Space Grotesk', sans-serif", fontSize: 13, boxSizing: 'border-box',
};

Object.assign(window, { CateringScreenV2 });
