-- OPENBUREAU CMS — posts-Tabelle. In den Supabase-Stack einspielen
-- (SQL-Editor oder psql). Spalten bilden das Hugo-Frontmatter ab.

create extension if not exists "pgcrypto";

create table if not exists public.posts (
  id           uuid primary key default gen_random_uuid(),
  section      text not null,            -- buerofuehrung | software | theorie
  slug         text not null,            -- a-z0-9- (Dateiname ohne .md)
  title        text not null,
  date         date not null default current_date,
  weight       int,
  tags         text[] default '{}',
  summary      text,
  cover_image  text,
  layout       text,                     -- z.B. "image" | "text"
  external     text,                     -- externer Link (wie RAPPORT)
  color        text,                     -- z.B. "kusa" | "yuyake"
  body         text default '',          -- Markdown-Inhalt
  status       text not null default 'draft',  -- draft | published
  author       text,
  created_at   timestamptz not null default now(),
  updated_at   timestamptz not null default now(),
  published_at timestamptz,
  unique (section, slug)
);

create index if not exists posts_status_idx on public.posts (status);
create index if not exists posts_section_idx on public.posts (section);

-- RLS aktivieren; die api nutzt den Service-Key (umgeht RLS). Wenn das
-- Frontend später direkt liest, hier gezielte Policies ergänzen.
alter table public.posts enable row level security;

-- ── Dialog / Diskussionen ───────────────────────────────────────────────
-- Thread = Pfad des Beitrags (z.B. /library/software/stack/). Flache Wortmeldungen
-- mit optionalem Bezug (parent_id). Idempotent — auf bestehende DB anwendbar.
create table if not exists public.comments (
  id            uuid primary key default gen_random_uuid(),
  thread        text not null,
  parent_id     uuid references public.comments(id) on delete cascade,
  user_id       uuid,
  author_name   text,
  author_avatar text,
  body          text not null,
  created_at    timestamptz not null default now(),
  deleted       boolean not null default false
);
create index if not exists comments_thread_idx on public.comments (thread, created_at);
alter table public.comments enable row level security;
grant all on public.comments to anon, authenticated, service_role;
