-- Migration 011: Neue Dimension "Trainingsstil" (Breitensport/Leistungssport)
-- Erstellt: 2026-04-23
-- Beschreibung: Neue Katalog-Dimension für Trainingsausrichtung
-- Grund: Trennung von "Stilrichtung" (Shotokan) und "Trainingsstil" (Breitensport)

-- ============================================================================
-- PHASE 1: Haupttabelle erstellen
-- ============================================================================

CREATE TABLE IF NOT EXISTS training_types (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) UNIQUE NOT NULL,
    abbreviation VARCHAR(20),
    description TEXT,
    sort_order INT DEFAULT 99,
    status VARCHAR(50) DEFAULT 'active' CHECK (status IN ('active', 'archived')),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

-- ============================================================================
-- PHASE 2: Seed-Daten
-- ============================================================================

INSERT INTO training_types (name, abbreviation, description, sort_order) VALUES
    ('Breitensport', 'BS', 'Freizeitorientiertes Training für Gesundheit und Spaß', 1),
    ('Leistungssport', 'LS', 'Wettkampforientiertes Training mit Leistungsfokus', 2),
    ('Wettkampf', 'WK', 'Spezifische Wettkampfvorbereitung', 3)
ON CONFLICT (name) DO NOTHING;

-- ============================================================================
-- PHASE 3: Junction-Tabelle für M:N Übungszuordnung
-- ============================================================================

CREATE TABLE IF NOT EXISTS exercise_training_types (
    id SERIAL PRIMARY KEY,
    exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
    training_type_id INT REFERENCES training_types(id) ON DELETE RESTRICT,
    is_primary BOOLEAN DEFAULT false,
    created_at TIMESTAMP DEFAULT NOW(),
    UNIQUE(exercise_id, training_type_id)
);

-- ============================================================================
-- PHASE 4: Indizes
-- ============================================================================

CREATE INDEX IF NOT EXISTS idx_exercise_training_types_exercise
    ON exercise_training_types(exercise_id);

CREATE INDEX IF NOT EXISTS idx_exercise_training_types_type
    ON exercise_training_types(training_type_id);

CREATE INDEX IF NOT EXISTS idx_exercise_training_types_primary
    ON exercise_training_types(is_primary);

-- ============================================================================
-- PHASE 5: Validierung
-- ============================================================================

-- Nach dieser Migration:
-- - Neue Dimension "training_types" (Breitensport, Leistungssport, Wettkampf)
-- - M:N Zuordnung zu Übungen über exercise_training_types
-- - is_primary Flag für Haupt-Trainingsstil
-- - ON DELETE RESTRICT: Training Types können nicht gelöscht werden wenn zugeordnet
