-- ====================================================================
-- 0042_license — License-Foundation
-- ====================================================================
-- Speichert pro Instanz/Mandant einen signierten License-JWT. Inhalt:
--   - tier (free/starter/business/enterprise)
--   - max_employees, ma_overage_price_eur
--   - enabled modules + per-module limits
--   - hosting (cloud | self-hosted), branding_level
--   - exp
--
-- Der JWT wird im Application-Code per public key validiert (lib/
-- license.ts). Bei fehlendem oder ungueltigem Key faellt die Instanz
-- auf Free-Tier-Defaults zurueck (10 MA, Core only).
--
-- license_status ist ein gecachter Wert ('active' | 'grace' | 'expired'
-- | 'invalid'), license_checked_at der letzte Pruef-Zeitpunkt. Beides
-- nicht-load-bearing — wird beim periodischen Check refresht. Idee:
-- Render-Pages koennen ohne JWT-Decode den Status anzeigen.
-- --------------------------------------------------------------------

alter table public.site_settings
  add column if not exists license_key text,
  add column if not exists license_status text,
  add column if not exists license_checked_at timestamptz;

comment on column public.site_settings.license_key is
  'Signierter License-JWT (RS256). Wird per lib/license.ts gegen den Public Key validiert. NULL → Free-Tier-Defaults.';
comment on column public.site_settings.license_status is
  'Gecachter Status: active | grace | expired | invalid | null. Wird beim periodischen Check aktualisiert.';
comment on column public.site_settings.license_checked_at is
  'Letzter Validierungs-Zeitpunkt. Wird genutzt um Refresh-Cycles zu drosseln.';
