-- Die Anwendungsrolle muss die Personalnummern-Sequenz fortschreiben dürfen.
--
-- Hintergrund: employees.personnel_number ist GENERATED ALWAYS AS IDENTITY.
-- Der Massenimport übernimmt die Nummern aus der Quelldatei — sie stehen auf
-- Lohnzetteln, in Akten und auf Ausweisen, ein Import darf sie nicht neu
-- vergeben — und schreibt danach den Zähler auf das neue Maximum.
--
-- Ohne diesen Schritt vergäbe die Datenbank bei der nächsten Neueinstellung
-- eine Nummer, die der Import bereits verbraucht hat. Der eindeutige Index
-- weist sie ab, und zwar erst Wochen später beim ersten Eintritt nach der
-- Übernahme — weit weg von der Ursache.
--
-- `setval()` verlangt UPDATE auf der Sequenz. `usage, select` reicht nicht;
-- genau daran ist der erste Durchstich gescheitert.
do $$
declare
  v_sequenz text := pg_get_serial_sequence('public.employees', 'personnel_number');
  r text;
begin
  if v_sequenz is null then
    raise exception 'Sequenz zu employees.personnel_number nicht gefunden.';
  end if;

  -- Nur an Rollen, die es gibt: dieselbe Datei soll auf einem gewöhnlichen
  -- PostgreSQL ohne die Supabase-Rollen laufen.
  foreach r in array array['alpenwerk_app', 'authenticated', 'service_role'] loop
    if exists (select 1 from pg_roles where rolname = r) then
      execute format('grant usage, select, update on sequence %s to %I', v_sequenz, r);
    end if;
  end loop;
end;
$$;

-- Damit künftige Sequenzen in diesem Schema dieselben Rechte bekommen und
-- der nächste Import nicht an derselben Stelle stehenbleibt.
do $$
begin
  if exists (select 1 from pg_roles where rolname = 'alpenwerk_app') then
    execute 'alter default privileges in schema public grant usage, select, update on sequences to alpenwerk_app';
  end if;
end;
$$;
