-- Empfang-Kiosk-Modus: separates Auth-Modell fuer das Tablet am
-- Empfangstresen — KEIN Admin-Zugriff.
-- ====================================================================
-- Idee:
--   * Admin legt einen Kiosk an (Name, z.B. "Empfangstresen Hauptgebaeude"),
--     bekommt einmalig eine URL `https://teamvis.de/empfang/k/<token>`.
--   * Diese URL wird einmal auf dem Tablet geoeffnet → Server validiert
--     Token gegen `token_hash`, setzt langlebiges `kiosk_session`-Cookie
--     (iron-session, 1 Jahr) und redirected auf `/empfang`.
--   * Das Tablet bleibt damit dauerhaft im Empfangs-Modus, kann aber
--     ueber das Cookie nichts anderes als die Empfang-Action.
--   * Token wird nicht im Klartext gespeichert — bei Verlust einfach
--     widerrufen (`revoked_at` setzen) und neuen Kiosk anlegen.

create table if not exists public.reception_kiosks (
  id           uuid primary key default gen_random_uuid(),
  name         text not null,
  -- Slug zum Anzeigen in Admin-UI / Logs (z.B. "empfang-haupt").
  -- Eindeutig, klein, ohne Leerzeichen — generiert aus dem Namen.
  slug         text not null unique,
  -- SHA256-Hex des Tokens. Token selbst (Base64URL ~32B) wird nur
  -- bei der Erstellung an die Admin-UI zurueckgegeben und sofort
  -- in die Aktivierungs-URL eingebaut. Danach nicht mehr abrufbar.
  token_hash   text not null,
  created_at   timestamptz not null default now(),
  -- Wann zuletzt ein Request mit dem Kiosk-Cookie validiert wurde.
  -- Hilfreich um vergessene/inaktive Tablets zu erkennen.
  last_used_at timestamptz,
  -- Soft-Revoke. Eintraege bleiben fuer Audit-Zwecke erhalten;
  -- ein widerrufener Kiosk akzeptiert kein Cookie und keine URL mehr.
  revoked_at   timestamptz
);

create index if not exists reception_kiosks_token_hash_idx
  on public.reception_kiosks (token_hash)
  where revoked_at is null;

alter table public.reception_kiosks enable row level security;
-- Default deny — Admin-Zugriff laeuft ueber Service-Role.
