-- Migration 046: Rename Shop → Ausrüstungsanfrage
-- Renames all shop_* tables and updates permission references.

-- ═══════════════════════════════════════════════════════════════════════════
-- 1. Rename tables
-- ═══════════════════════════════════════════════════════════════════════════

ALTER TABLE IF EXISTS shop_artikel RENAME TO ausruestung_artikel;
ALTER TABLE IF EXISTS shop_anfragen RENAME TO ausruestung_anfragen;
ALTER TABLE IF EXISTS shop_anfrage_positionen RENAME TO ausruestung_anfrage_positionen;
ALTER TABLE IF EXISTS shop_anfrage_bestellung RENAME TO ausruestung_anfrage_bestellung;

-- ═══════════════════════════════════════════════════════════════════════════
-- 2. Rename indexes
-- ═══════════════════════════════════════════════════════════════════════════

ALTER INDEX IF EXISTS idx_shop_artikel_kategorie RENAME TO idx_ausruestung_artikel_kategorie;
ALTER INDEX IF EXISTS idx_shop_artikel_aktiv RENAME TO idx_ausruestung_artikel_aktiv;
ALTER INDEX IF EXISTS idx_shop_anfragen_anfrager RENAME TO idx_ausruestung_anfragen_anfrager;
ALTER INDEX IF EXISTS idx_shop_anfragen_status RENAME TO idx_ausruestung_anfragen_status;
ALTER INDEX IF EXISTS idx_shop_anfrage_positionen_anfrage RENAME TO idx_ausruestung_anfrage_positionen_anfrage;

-- ═══════════════════════════════════════════════════════════════════════════
-- 3. Rename triggers (skip if not exist — wrapped in DO block)
-- ═══════════════════════════════════════════════════════════════════════════

DO $$ BEGIN
  ALTER TRIGGER trg_shop_artikel_aktualisiert ON ausruestung_artikel RENAME TO trg_ausruestung_artikel_aktualisiert;
EXCEPTION WHEN undefined_object THEN NULL;
END $$;

DO $$ BEGIN
  ALTER TRIGGER trg_shop_anfragen_aktualisiert ON ausruestung_anfragen RENAME TO trg_ausruestung_anfragen_aktualisiert;
EXCEPTION WHEN undefined_object THEN NULL;
END $$;

-- ═══════════════════════════════════════════════════════════════════════════
-- 4. Update feature_groups + permissions (drop FK temporarily to avoid constraint violation)
-- ═══════════════════════════════════════════════════════════════════════════

-- Drop FK constraints that reference feature_groups.id
ALTER TABLE permissions DROP CONSTRAINT IF EXISTS permissions_feature_group_id_fkey;
ALTER TABLE group_permissions DROP CONSTRAINT IF EXISTS group_permissions_permission_id_fkey;

-- Now safe to update feature_groups
UPDATE feature_groups SET id = 'ausruestungsanfrage' WHERE id = 'shop';

-- Update permissions
UPDATE permissions SET
  id = REPLACE(id, 'shop:', 'ausruestungsanfrage:'),
  feature_group_id = 'ausruestungsanfrage'
WHERE feature_group_id = 'shop';

-- Update group_permissions
UPDATE group_permissions SET
  permission_id = REPLACE(permission_id, 'shop:', 'ausruestungsanfrage:')
WHERE permission_id LIKE 'shop:%';

-- Re-add FK constraints
ALTER TABLE permissions ADD CONSTRAINT permissions_feature_group_id_fkey
  FOREIGN KEY (feature_group_id) REFERENCES feature_groups(id) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE group_permissions ADD CONSTRAINT group_permissions_permission_id_fkey
  FOREIGN KEY (permission_id) REFERENCES permissions(id) ON UPDATE CASCADE ON DELETE CASCADE;

-- ═══════════════════════════════════════════════════════════════════════════
-- 5. Update notification quell_typ references
-- ═══════════════════════════════════════════════════════════════════════════

UPDATE notifications SET quell_typ = 'ausruestung_anfrage' WHERE quell_typ = 'shop_anfrage';
UPDATE notifications SET typ = 'ausruestung_anfrage' WHERE typ = 'shop_anfrage';
UPDATE notifications SET link = '/ausruestungsanfrage' WHERE link = '/shop';
