-- Migration 055: Comprehensive permissions re-seed
-- Ensures all feature_groups and permissions exist using their final names
-- (after all renames in 046/047/053). Safe to re-run — all ON CONFLICT DO NOTHING.
-- Also seeds wissen:view and bestellungen:view for all dashboard_ groups.

-- ═══════════════════════════════════════════════════════════════════════════
-- 1. Ensure all feature groups exist
-- ═══════════════════════════════════════════════════════════════════════════

INSERT INTO feature_groups (id, label, sort_order) VALUES
  ('kalender',           'Kalender',              1),
  ('fahrzeuge',          'Fahrzeuge',              2),
  ('einsaetze',          'Einsätze',               3),
  ('ausruestung',        'Ausrüstung',             4),
  ('mitglieder',         'Mitglieder',             5),
  ('atemschutz',         'Atemschutz',             6),
  ('wissen',             'Wissen',                 7),
  ('vikunja',            'Vikunja',                8),
  ('dashboard',          'Dashboard',              9),
  ('admin',              'Admin',                 10),
  ('bestellungen',       'Bestellungen',          11),
  ('ausruestungsanfrage','Interne Bestellungen',  12),
  ('issues',             'Issues',                13)
ON CONFLICT (id) DO NOTHING;

-- ═══════════════════════════════════════════════════════════════════════════
-- 2. Ensure all permissions exist (final names after all migrations)
-- ═══════════════════════════════════════════════════════════════════════════

-- Kalender (simplified 4-permission scheme from migration 040)
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('kalender:view',            'kalender', 'Termine ansehen',     'Kalender-Termine und Widgets einsehen',                     1),
  ('kalender:create',          'kalender', 'Termine verwalten',   'Termine erstellen/bearbeiten/absagen, Kategorien, Berichte', 2),
  ('kalender:view_bookings',   'kalender', 'Buchungen ansehen',   'Fahrzeugbuchungen und Buchungs-Widget einsehen',             3),
  ('kalender:manage_bookings', 'kalender', 'Buchungen verwalten', 'Buchungen erstellen/bearbeiten/stornieren/löschen',          4)
ON CONFLICT (id) DO NOTHING;

-- Fahrzeuge
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('fahrzeuge:view',               'fahrzeuge', 'Ansehen',           'Fahrzeugdetails einsehen',              1),
  ('fahrzeuge:create',             'fahrzeuge', 'Erstellen',         'Neue Fahrzeuge anlegen',                2),
  ('fahrzeuge:edit',               'fahrzeuge', 'Bearbeiten',        'Fahrzeugdaten bearbeiten',              3),
  ('fahrzeuge:change_status',      'fahrzeuge', 'Status ändern',     'Fahrzeugstatus ändern',                 4),
  ('fahrzeuge:manage_maintenance', 'fahrzeuge', 'Wartung verwalten', 'Wartungseinträge erstellen/bearbeiten', 5),
  ('fahrzeuge:delete',             'fahrzeuge', 'Löschen',           'Fahrzeuge löschen',                     6),
  ('fahrzeuge:widget',             'fahrzeuge', 'Widget',            'Dashboard-Widget für Fahrzeuge',        7)
ON CONFLICT (id) DO NOTHING;

-- Einsätze
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('einsaetze:view',             'einsaetze', 'Ansehen',            'Einsätze einsehen',                      1),
  ('einsaetze:view_reports',     'einsaetze', 'Berichte ansehen',   'Einsatzberichte/Berichtstext einsehen',  2),
  ('einsaetze:create',           'einsaetze', 'Erstellen',          'Neue Einsätze anlegen und bearbeiten',   3),
  ('einsaetze:delete',           'einsaetze', 'Löschen',            'Einsätze archivieren/löschen',           4),
  ('einsaetze:manage_personnel', 'einsaetze', 'Personal verwalten', 'Einsatzpersonal und Fahrzeuge zuweisen', 5)
ON CONFLICT (id) DO NOTHING;

-- Ausrüstung
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('ausruestung:view',               'ausruestung', 'Ansehen',              'Ausrüstung einsehen',                   1),
  ('ausruestung:create',             'ausruestung', 'Erstellen',            'Neue Ausrüstung anlegen und bearbeiten', 2),
  ('ausruestung:manage_maintenance', 'ausruestung', 'Wartung verwalten',    'Wartungseinträge verwalten',             3),
  ('ausruestung:delete',             'ausruestung', 'Löschen',              'Ausrüstung löschen',                     4),
  ('ausruestung:widget',             'ausruestung', 'Widget',               'Dashboard-Widget für Ausrüstung',       5),
  ('ausruestung:manage_categories',  'ausruestung', 'Kategorien verwalten', 'Ausrüstungskategorien verwalten',        6)
ON CONFLICT (id) DO NOTHING;

-- Mitglieder
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('mitglieder:view_own',      'mitglieder', 'Eigenes Profil',   'Eigenes Profil einsehen',          1),
  ('mitglieder:view_all',      'mitglieder', 'Alle Profile',     'Alle Mitglieder-Profile einsehen', 2),
  ('mitglieder:edit',          'mitglieder', 'Bearbeiten',       'Mitglieder-Profile bearbeiten',    3),
  ('mitglieder:create_profile','mitglieder', 'Profil erstellen', 'Neue Mitglieder-Profile anlegen',  4)
ON CONFLICT (id) DO NOTHING;

-- Atemschutz
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('atemschutz:view',   'atemschutz', 'Ansehen',    'Atemschutz-Daten aller Träger sehen', 1),
  ('atemschutz:create', 'atemschutz', 'Erstellen',  'Atemschutz-Einträge anlegen/ändern',  2),
  ('atemschutz:edit',   'atemschutz', 'Bearbeiten', 'Atemschutz-Einträge bearbeiten',      3),
  ('atemschutz:delete', 'atemschutz', 'Löschen',    'Atemschutz-Einträge löschen',         4),
  ('atemschutz:widget', 'atemschutz', 'Widget',     'Dashboard-Widget für Atemschutz',     5)
ON CONFLICT (id) DO NOTHING;

-- Wissen
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('wissen:view',          'wissen', 'Ansehen',        'Wissen-Seite anzeigen',                1),
  ('wissen:widget_recent', 'wissen', 'Widget: Letzte', 'Dashboard-Widget letzte Seiten',       2),
  ('wissen:widget_search', 'wissen', 'Widget: Suche',  'Dashboard-Widget für BookStack-Suche', 3)
ON CONFLICT (id) DO NOTHING;

-- Vikunja
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('vikunja:create_tasks',     'vikunja', 'Aufgaben erstellen',   'Neue Vikunja-Aufgaben erstellen',           1),
  ('vikunja:widget_tasks',     'vikunja', 'Widget: Aufgaben',     'Dashboard-Widget für Vikunja-Aufgaben',     2),
  ('vikunja:widget_quick_add', 'vikunja', 'Widget: Schnell-Task', 'Dashboard-Widget zum schnellen Erstellen',  3)
ON CONFLICT (id) DO NOTHING;

-- Dashboard
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('dashboard:widget_links',  'dashboard', 'Widget: Links',  'Dashboard-Widget für externe Links', 1),
  ('dashboard:widget_banner', 'dashboard', 'Widget: Banner', 'Dashboard-Widget für Banner',        2)
ON CONFLICT (id) DO NOTHING;

-- Admin
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('admin:view',                'admin', 'Ansehen',                    'Admin-Panel einsehen',                   1),
  ('admin:write',               'admin', 'Bearbeiten',                 'Admin-Einstellungen ändern',              2),
  ('admin:view_services',       'admin', 'Dienste ansehen',            'Dienste-Übersicht einsehen',              3),
  ('admin:edit_services',       'admin', 'Dienste bearbeiten',         'Dienste-Einstellungen ändern',            4),
  ('admin:view_system',         'admin', 'System ansehen',             'Systeminfo einsehen',                     5),
  ('admin:view_users',          'admin', 'Benutzer ansehen',           'Benutzerliste einsehen',                  6),
  ('admin:edit_users',          'admin', 'Benutzer bearbeiten',        'Benutzer verwalten',                      7),
  ('admin:edit_broadcast',      'admin', 'Broadcast bearbeiten',       'Broadcast-Nachrichten senden',            8),
  ('admin:view_banner',         'admin', 'Banner ansehen',             'Banner einsehen',                         9),
  ('admin:edit_banner',         'admin', 'Banner bearbeiten',          'Banner verwalten',                       10),
  ('admin:view_maintenance',    'admin', 'Wartungsmodus ansehen',      'Wartungsmodus-Status einsehen',           11),
  ('admin:edit_maintenance',    'admin', 'Wartungsmodus bearbeiten',   'Wartungsmodus ein-/ausschalten',          12),
  ('admin:view_fdisk',          'admin', 'FDISK ansehen',              'FDISK-Einstellungen einsehen',            13),
  ('admin:edit_fdisk',          'admin', 'FDISK bearbeiten',           'FDISK-Einstellungen ändern',              14),
  ('admin:view_permissions',    'admin', 'Berechtigungen ansehen',     'Berechtigungsmatrix einsehen',            15),
  ('admin:edit_permissions',    'admin', 'Berechtigungen bearbeiten',  'Berechtigungen verwalten',                16),
  ('admin:view_order_settings', 'admin', 'Bestelleinstellungen ansehen','Bestelleinstellungen einsehen',          17),
  ('admin:edit_order_settings', 'admin', 'Bestelleinstellungen bearb.','Bestelleinstellungen ändern',             18),
  ('admin:view_data',           'admin', 'Daten ansehen',              'Datenverwaltung einsehen',                19),
  ('admin:edit_data',           'admin', 'Daten bearbeiten',           'Daten verwalten',                        20),
  ('admin:view_debug',          'admin', 'Debug',                      'Debug-Informationen einsehen',            21)
ON CONFLICT (id) DO NOTHING;

-- Bestellungen
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('bestellungen:view',             'bestellungen', 'Ansehen',               'Bestellungen einsehen',                     1),
  ('bestellungen:create',           'bestellungen', 'Erstellen/Bearbeiten',  'Bestellungen erstellen und bearbeiten',     2),
  ('bestellungen:delete',           'bestellungen', 'Löschen',               'Bestellungen löschen',                      3),
  ('bestellungen:manage_vendors',   'bestellungen', 'Lieferanten verwalten', 'Lieferanten-Datenbank verwalten',           4),
  ('bestellungen:export',           'bestellungen', 'PDF Export',            'Bestellungen als PDF exportieren',          5),
  ('bestellungen:manage_reminders', 'bestellungen', 'Erinnerungen',          'Erinnerungen für Bestellungen verwalten',   6),
  ('bestellungen:widget',           'bestellungen', 'Widget',                'Dashboard-Widget für Bestellungen',         7),
  ('bestellungen:manage_orders',    'bestellungen', 'Aufträge verwalten',    'Bestellaufträge verwalten',                 8)
ON CONFLICT (id) DO NOTHING;

-- Ausrüstungsanfrage (formerly shop — final names after migration 046 + 047)
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('ausruestungsanfrage:view',           'ausruestungsanfrage', 'Katalog ansehen',        'Katalog einsehen',                                              1),
  ('ausruestungsanfrage:create_request', 'ausruestungsanfrage', 'Anfrage stellen',        'Bestellanfragen stellen',                                       2),
  ('ausruestungsanfrage:manage_catalog', 'ausruestungsanfrage', 'Katalog verwalten',      'Artikel im Katalog verwalten',                                  3),
  ('ausruestungsanfrage:approve',        'ausruestungsanfrage', 'Anfragen genehmigen',    'Bestellanfragen genehmigen oder ablehnen',                      4),
  ('ausruestungsanfrage:link_orders',    'ausruestungsanfrage', 'Mit Bestellung verknüpfen', 'Anfragen mit Lieferantenbestellungen verknüpfen',             5),
  ('ausruestungsanfrage:widget',         'ausruestungsanfrage', 'Widget',                 'Dashboard-Widget für Anfragen',                                 6),
  ('ausruestungsanfrage:view_all',       'ausruestungsanfrage', 'Alle Anfragen ansehen',  'Aggregierte Übersicht aller Anfragen',                          7),
  ('ausruestungsanfrage:order_for_user', 'ausruestungsanfrage', 'Für Benutzer bestellen', 'Anfragen im Namen anderer erstellen',                           8),
  ('ausruestungsanfrage:edit',           'ausruestungsanfrage', 'Alle Anfragen bearbeiten','Alle Anfragen bearbeiten (unabhängig von Status/Besitzer)',     9)
ON CONFLICT (id) DO NOTHING;

-- Issues (final permissions after migration 053 rework — issues:manage removed)
INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('issues:create',        'issues', 'Erstellen',      'Issues erstellen',                                              1),
  ('issues:view_own',      'issues', 'Eigene ansehen', 'Eigene Issues einsehen',                                        2),
  ('issues:view_all',      'issues', 'Alle ansehen',   'Alle Issues einsehen',                                          3),
  ('issues:change_status', 'issues', 'Status ändern',  'Status ändern und kommentieren',                                4),
  ('issues:edit',          'issues', 'Bearbeiten',     'Issues bearbeiten (Titel, Beschreibung, Typ, Priorität, Zuweisung)', 5),
  ('issues:edit_settings', 'issues', 'Einstellungen',  'Issue-Kategorien verwalten',                                    6),
  ('issues:delete',        'issues', 'Löschen',        'Issues löschen',                                                7)
ON CONFLICT (id) DO NOTHING;

-- ═══════════════════════════════════════════════════════════════════════════
-- 3. Seed wissen and bestellungen:view for all dashboard_ groups
-- ═══════════════════════════════════════════════════════════════════════════

DO $$
DECLARE
  grp TEXT;
BEGIN
  FOR grp IN
    SELECT DISTINCT authentik_group FROM group_permissions WHERE authentik_group LIKE 'dashboard_%'
  LOOP
    INSERT INTO group_permissions (authentik_group, permission_id)
    VALUES (grp, 'wissen:view'), (grp, 'wissen:widget_recent'), (grp, 'wissen:widget_search')
    ON CONFLICT DO NOTHING;

    INSERT INTO group_permissions (authentik_group, permission_id)
    VALUES (grp, 'bestellungen:view')
    ON CONFLICT DO NOTHING;
  END LOOP;
END $$;
