-- Verwaiste service_relations entfernen, wenn Bereiche/Stellen
-- gelöscht werden.
-- ====================================================================
-- service_relations.scope_id ist polymorph (org_unit oder position),
-- daher kein direkter FK möglich. Stattdessen Trigger, die nach Delete
-- auf den Quell-Tabellen die scope_id aufräumen.
--
-- Strategie: NULL-out (statt cascade-delete), damit die service_relation
-- als Datensatz erhalten bleibt — der Admin sieht im Audit, dass die
-- Verknüpfung früher existierte und die Quelle weg ist. Die App-UI
-- zeigt sie als "(Bereich/Stelle gelöscht)".

create or replace function public.cleanup_service_relations_org_unit()
  returns trigger
  language plpgsql
  as $$
begin
  update public.service_relations
    set scope_id = null
    where scope_kind = 'org_unit' and scope_id = OLD.id;
  return OLD;
end;
$$;

create or replace function public.cleanup_service_relations_position()
  returns trigger
  language plpgsql
  as $$
begin
  update public.service_relations
    set scope_id = null
    where scope_kind = 'position' and scope_id = OLD.id;
  return OLD;
end;
$$;

drop trigger if exists trg_cleanup_service_relations_org_unit
  on public.org_units;
create trigger trg_cleanup_service_relations_org_unit
  before delete on public.org_units
  for each row execute function public.cleanup_service_relations_org_unit();

drop trigger if exists trg_cleanup_service_relations_position
  on public.positions;
create trigger trg_cleanup_service_relations_position
  before delete on public.positions
  for each row execute function public.cleanup_service_relations_position();
