-- Voranmeldung von Besuchern.
-- ====================================================================
-- Mitarbeiter koennen im Self-Service-Portal vorab Besucher anmelden,
-- bevor diese am Empfang erscheinen. Am Empfangs-Tablet gibt es dann
-- eine "Erwartet"-Liste mit Ein-Klick-Eintragen — der Lead-Insert
-- erfolgt automatisch, Tipparbeit am Tresen entfaellt.
--
-- Lifecycle:
--   pending  → wartet auf Eintreffen
--   arrived  → wurde am Empfang erfasst (lead_id verknuepft)
--   expired  → war 24h nach erwarteter Zeit nicht da
--   cancelled → vom MA storniert

create table if not exists public.visitor_preregistrations (
  id              uuid primary key default gen_random_uuid(),
  -- MA der die Voranmeldung erstellt hat
  employee_id     uuid not null references public.employees(id) on delete cascade,
  -- Daten des erwarteten Besuchers
  visitor_first_name text not null,
  visitor_last_name  text not null,
  visitor_company    text,
  visitor_email      text,
  visitor_phone      text,
  reason             text,
  -- Erwarteter Termin (kann null sein bei "irgendwann heute")
  expected_at        timestamptz,
  -- Lifecycle
  status text not null default 'pending'
    check (status in ('pending', 'arrived', 'expired', 'cancelled')),
  -- Bei status='arrived' Verknuepfung zum entstandenen Lead
  arrived_lead_id    uuid references public.card_leads(id) on delete set null,
  created_at         timestamptz not null default now(),
  updated_at         timestamptz not null default now()
);

create index if not exists visitor_preregistrations_employee_idx
  on public.visitor_preregistrations (employee_id, created_at desc);

-- Index fuer "heute pending" im Empfang-Tablet
create index if not exists visitor_preregistrations_pending_idx
  on public.visitor_preregistrations (expected_at)
  where status = 'pending';

alter table public.visitor_preregistrations enable row level security;
-- Default deny — Zugriff ueber Service-Role (Admin + Kiosk).
