-- Branding-Konfiguration, über /admin/branding per UI editierbar.
-- Exakt EINE Row in der Tabelle — Singleton via unique-Index erzwungen.
-- Leere/NULL-Werte bedeuten "Fallback auf ENV bzw. Code-Defaults".

create table if not exists public.site_settings (
  id uuid primary key default gen_random_uuid(),
  singleton boolean not null default true,

  -- Firma / Öffentlich
  company_name text,
  company_short text,
  claim text,
  description text,
  website text,

  -- SEO / Metadaten
  seo_title text,
  seo_description text,
  not_found_suffix text,

  -- Admin-Labels
  admin_app_name text,
  admin_app_subtext text,
  default_company_name text,
  calendar_placeholder text,

  -- Theme-Farben (Hex)
  primary_color text,
  primary_dark text,
  primary_deep text,
  secondary_color text,
  secondary_dark text,
  secondary_deep text,

  -- Assets (public URLs aus dem branding-assets Storage-Bucket)
  logo_url text,
  logo_alt text,
  favicon_url text,

  updated_at timestamptz not null default now()
);

-- Exakt eine Row erlaubt: unique on (singleton=true)
create unique index if not exists site_settings_singleton_unique
  on public.site_settings ((true)) where singleton = true;

-- Initiale Row anlegen, falls noch nicht da
insert into public.site_settings (singleton)
  values (true)
  on conflict do nothing;

-- RLS: Branding ist public (Farben, Name, Logo) — anon darf lesen.
alter table public.site_settings enable row level security;

drop policy if exists "public_read_site_settings" on public.site_settings;
create policy "public_read_site_settings"
  on public.site_settings
  for select to anon
  using (true);
-- Schreibzugriff bleibt bei service-role (Admin-Server-Actions).

-- Storage-Bucket für Logo / Favicon / Icon. Öffentlich, damit <img> und
-- <link rel="icon"> direkt drauf zugreifen können.
insert into storage.buckets (id, name, public)
  values ('branding-assets', 'branding-assets', true)
  on conflict (id) do nothing;

-- Jeder darf lesen (Bucket ist public gesetzt, aber ein expliziter Select-
-- Policy-Eintrag schadet nicht und macht das Verhalten explizit).
drop policy if exists "public_read_branding_assets" on storage.objects;
create policy "public_read_branding_assets"
  on storage.objects for select
  to anon
  using (bucket_id = 'branding-assets');
