import React from 'react';

// Zustellstatus gemäss UC00-API (`delivery_status`, ADR-024)
const DELIVERY = {
  queued: { label: 'Versand ausstehend', tone: 'gray' },
  sent: { label: 'versendet', tone: 'blue' },
  send_failed: { label: 'Versandfehler', tone: 'yellow' },
  undeliverable: { label: 'unzustellbar', tone: 'red' },
};

const invitations = [
  { email: 'max@example.test', role: 'mitarbeiter', status: 'offen', expires: '2026-05-14', selected: true, tone: 'yellow', delivery: 'sent' },
  { email: 'sara@example.test', role: 'tenant_admin', status: 'offen', expires: '2026-05-10', selected: false, tone: 'yellow', delivery: 'sent' },
  { email: 'nina@exampel.test', role: 'mitarbeiter', status: 'offen', expires: '2026-05-14', selected: false, tone: 'yellow', delivery: 'undeliverable' },
  { email: 'tom@example.test', role: 'mitarbeiter', status: 'abgelaufen', expires: '2026-05-01', selected: false, tone: 'red', delivery: 'sent' },
  { email: 'lisa@example.test', role: 'mitarbeiter', status: 'angenommen', expires: '2026-05-03', selected: false, tone: 'green', delivery: 'sent' },
];

function Badge({ children, tone = 'gray' }) {
  const tones = {
    green: 'bg-green-100 text-green-800 border-green-200',
    blue: 'bg-blue-100 text-blue-800 border-blue-200',
    yellow: 'bg-yellow-100 text-yellow-800 border-yellow-200',
    red: 'bg-red-100 text-red-800 border-red-200',
    gray: 'bg-slate-100 text-slate-700 border-slate-200',
  };
  return <span className={`inline-flex rounded-full border px-3 py-1 text-xs font-semibold ${tones[tone]}`}>{children}</span>;
}

function Card({ title, children }) {
  return (
    <section className="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm">
      <h2 className="text-lg font-bold">{title}</h2>
      <div className="mt-4">{children}</div>
    </section>
  );
}

function Field({ label, value, hint }) {
  return (
    <div>
      <label className="text-xs font-semibold uppercase tracking-wide text-slate-500">{label}</label>
      <div className="mt-1 rounded-xl border border-slate-300 bg-slate-50 px-3 py-2 text-sm font-medium text-slate-800">{value}</div>
      {hint ? <p className="mt-1 text-xs text-slate-500">{hint}</p> : null}
    </div>
  );
}

export default function BU05EinladungVerwalten() {
  return (
    <div className="min-h-screen bg-slate-50 p-6 text-slate-900">
      <div className="mx-auto max-w-7xl space-y-5">
        <header className="rounded-2xl border border-sky-200 bg-sky-50 p-6 shadow-sm">
          <div className="flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between">
            <div>
              <p className="text-sm font-semibold uppercase tracking-wide text-sky-700">UC08 · BU-05</p>
              <h1 className="mt-1 text-3xl font-bold">Einladung verwalten</h1>
              <p className="mt-2 max-w-3xl text-sm text-slate-600">
                Einladungen prüfen, erneut senden, widerrufen und auditierbar nachvollziehen.
              </p>
            </div>
            <div className="flex flex-wrap gap-2">
              <button className="rounded-xl border border-slate-300 bg-white px-4 py-2 text-sm font-semibold text-slate-800">Audit</button>
              <button className="rounded-xl border border-slate-300 bg-white px-4 py-2 text-sm font-semibold text-slate-800">Filter</button>
              <button className="rounded-xl bg-sky-700 px-4 py-2 text-sm font-semibold text-white">Neue Einladung</button>
            </div>
          </div>
        </header>

        <div className="grid gap-5 lg:grid-cols-[390px_1fr]">
          <section className="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm">
            <h2 className="text-lg font-bold">Einladungen</h2>
            <div className="mt-4 space-y-3">
              {invitations.map((invitation) => (
                <div key={invitation.email} className={`rounded-2xl border p-4 ${invitation.selected ? 'border-sky-300 bg-sky-50' : 'border-slate-200 bg-slate-50'}`}>
                  <p className="font-semibold">{invitation.email}</p>
                  <p className="mt-1 text-sm text-slate-500">{invitation.role} · gültig bis {invitation.expires}</p>
                  <div className="mt-2 flex flex-wrap gap-2">
                    <Badge tone={invitation.tone}>{invitation.status}</Badge>
                    <Badge tone={DELIVERY[invitation.delivery].tone}>{DELIVERY[invitation.delivery].label}</Badge>
                  </div>
                  {invitation.delivery === 'undeliverable' ? (
                    <p className="mt-2 text-xs text-red-700">Die Einladung konnte nicht zugestellt werden. Bitte E-Mail-Adresse prüfen.</p>
                  ) : null}
                </div>
              ))}
            </div>
          </section>

          <div className="space-y-5">
            <Card title="Detail">
              <div className="grid gap-4 md:grid-cols-2">
                <Field label="E-Mail" value="max@example.test" />
                <Field label="Rolle" value="mitarbeiter" />
                <Field label="Status" value="pending" />
                <Field label="gültig bis" value="2026-05-14" />
                <Field label="erstellt durch" value="David Admin" />
                <Field label="Zustellung" value="versendet" hint="Aus dem letzten Versandeintrag abgeleitet; keine Fehlercodes oder Providertexte (ADR-024)" />
              </div>
              <div className="mt-4 flex flex-wrap gap-2"><Badge tone="green">Token-Status aktiv</Badge><Badge tone="yellow">Token wird nicht angezeigt</Badge></div>
            </Card>

            <div className="grid gap-5 lg:grid-cols-2">
              <Card title="Erneut senden">
                <p className="text-sm text-slate-600">Erzeugt einen neuen Token und macht den alten Token ungültig.</p>
                <button className="mt-4 rounded-xl bg-sky-700 px-4 py-2 text-sm font-semibold text-white">Erneut senden</button>
              </Card>
              <Card title="Widerrufen">
                <Field label="Grund" value="Pflichtgrund für Widerruf" />
                <button className="mt-4 rounded-xl border border-red-200 bg-red-50 px-4 py-2 text-sm font-semibold text-red-800">Widerrufen</button>
              </Card>
            </div>

            <Card title="Audit-Hinweise">
              <p className="text-sm text-slate-600">user_invited · user_invitation_resent · user_invitation_revoked</p>
              <p className="mt-2 text-sm text-slate-600">Jede Aktion speichert Benutzer, Zeitpunkt, Tenant und Grund.</p>
            </Card>
          </div>
        </div>
      </div>
    </div>
  );
}
