-- Migration 070: Ausruestung-Typen (Equipment Types)
-- Dynamic equipment type table with many-to-many junction to ausruestung.
-- Mirrors the fahrzeug_typen pattern from migration 067.
-- Seeds initial types from existing ausruestung_kategorien values.

-- ═══════════════════════════════════════════════════════════════════════════
-- 1. Ausruestung-Typen
-- ═══════════════════════════════════════════════════════════════════════════

CREATE TABLE IF NOT EXISTS ausruestung_typen (
  id              SERIAL       PRIMARY KEY,
  name            VARCHAR(100) NOT NULL UNIQUE,
  beschreibung    TEXT,
  icon            VARCHAR(50),
  created_at      TIMESTAMPTZ  NOT NULL DEFAULT NOW()
);

-- ═══════════════════════════════════════════════════════════════════════════
-- 2. Junction table (many-to-many)
-- ═══════════════════════════════════════════════════════════════════════════

CREATE TABLE IF NOT EXISTS ausruestung_ausruestung_typen (
  ausruestung_id     UUID NOT NULL REFERENCES ausruestung(id) ON DELETE CASCADE,
  ausruestung_typ_id INT  NOT NULL REFERENCES ausruestung_typen(id) ON DELETE CASCADE,
  PRIMARY KEY (ausruestung_id, ausruestung_typ_id)
);

CREATE INDEX IF NOT EXISTS idx_aat_ausruestung_id ON ausruestung_ausruestung_typen(ausruestung_id);
CREATE INDEX IF NOT EXISTS idx_aat_typ_id ON ausruestung_ausruestung_typen(ausruestung_typ_id);

-- ═══════════════════════════════════════════════════════════════════════════
-- 3. Seed types from existing ausruestung_kategorien
-- ═══════════════════════════════════════════════════════════════════════════

INSERT INTO ausruestung_typen (name, beschreibung)
  SELECT name, kurzname
  FROM ausruestung_kategorien
ON CONFLICT (name) DO NOTHING;

-- Populate junction table from existing kategorie_id assignments
INSERT INTO ausruestung_ausruestung_typen (ausruestung_id, ausruestung_typ_id)
  SELECT a.id, at2.id
  FROM ausruestung a
  JOIN ausruestung_kategorien ak ON a.kategorie_id = ak.id
  JOIN ausruestung_typen at2 ON at2.name = ak.name
  WHERE a.kategorie_id IS NOT NULL
    AND a.deleted_at IS NULL
ON CONFLICT DO NOTHING;

-- ═══════════════════════════════════════════════════════════════════════════
-- 4. Permission for managing equipment types
-- ═══════════════════════════════════════════════════════════════════════════

INSERT INTO permissions (id, feature_group_id, label, description, sort_order) VALUES
  ('ausruestung:manage_types', 'ausruestung', 'Typen verwalten', 'Ausruestung-Typen erstellen und bearbeiten', 10)
ON CONFLICT (id) DO NOTHING;

-- Grant to kommando and zeugmeister
INSERT INTO group_permissions (authentik_group, permission_id) VALUES
  ('dashboard_kommando', 'ausruestung:manage_types'),
  ('dashboard_zeugmeister', 'ausruestung:manage_types')
ON CONFLICT DO NOTHING;
