-- Migration 051: P-11 Legal-Hold Lifecycle-Status
-- Sofortsperrung fuer rechtlich problematische Medien (Compliance-Paket P-11)
--
-- Architekturentscheidung:
-- rights_status='blocked' bleibt als Spiegel-Schnellstatus (P-06-Kompatibilitaet).
-- Primaere Wahrheit: legal_hold_active + dedizierte Metadaten-Felder in media_assets.
-- Dies ermoeglicht klare Trennung: P-06 Deklarationsstatus / P-11 Legal Hold / P-03 Lifecycle.
-- P-13 kann spaeter denselben set_legal_hold-Service nutzen.

ALTER TABLE media_assets
    ADD COLUMN IF NOT EXISTS legal_hold_active              BOOLEAN NOT NULL DEFAULT FALSE,
    ADD COLUMN IF NOT EXISTS legal_hold_reason_code         VARCHAR(50)
        CHECK (legal_hold_reason_code IN (
            'rights_dispute',
            'consent_withdrawn',
            'privacy_complaint',
            'copyright_complaint',
            'youth_protection',
            'illegal_content',
            'other'
        )),
    ADD COLUMN IF NOT EXISTS legal_hold_reason_note         TEXT,
    ADD COLUMN IF NOT EXISTS legal_hold_set_by_profile_id   INT REFERENCES profiles(id) ON DELETE SET NULL,
    ADD COLUMN IF NOT EXISTS legal_hold_set_at              TIMESTAMPTZ,
    ADD COLUMN IF NOT EXISTS legal_hold_released_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
    ADD COLUMN IF NOT EXISTS legal_hold_released_at         TIMESTAMPTZ,
    ADD COLUMN IF NOT EXISTS legal_hold_release_note        TEXT;

COMMENT ON COLUMN media_assets.legal_hold_active IS
    'P-11: TRUE = Medium unter Legal Hold; sofortige Sperrung fuer alle normalen Nutzerpfade. '
    'Retention-Job darf dieses Medium nicht purgen. '
    'rights_status wird bei Aktivierung auf ''blocked'' gespiegelt.';

COMMENT ON COLUMN media_assets.legal_hold_reason_code IS
    'P-11: Kategorie des Legal Holds. Pflicht beim Setzen.';

COMMENT ON COLUMN media_assets.legal_hold_reason_note IS
    'P-11: Freitext-Begruendung fuer den Legal Hold.';

COMMENT ON COLUMN media_assets.legal_hold_set_by_profile_id IS
    'P-11: Profil das den Legal Hold gesetzt hat (Superadmin).';

COMMENT ON COLUMN media_assets.legal_hold_set_at IS
    'P-11: Zeitpunkt der Legal-Hold-Aktivierung.';

COMMENT ON COLUMN media_assets.legal_hold_released_by_profile_id IS
    'P-11: Profil das den Legal Hold aufgehoben hat.';

COMMENT ON COLUMN media_assets.legal_hold_released_at IS
    'P-11: Zeitpunkt der Legal-Hold-Freigabe.';

COMMENT ON COLUMN media_assets.legal_hold_release_note IS
    'P-11: Begruendung fuer die Aufhebung des Legal Holds.';

-- Index fuer Admin-Liste aktiver Legal Holds
CREATE INDEX IF NOT EXISTS idx_media_assets_legal_hold_active
    ON media_assets (legal_hold_active)
    WHERE legal_hold_active = TRUE;

-- Neue event_types fuer media_asset_audit_log
ALTER TABLE media_asset_audit_log
    DROP CONSTRAINT IF EXISTS media_asset_audit_log_event_type_check;

ALTER TABLE media_asset_audit_log
    ADD CONSTRAINT media_asset_audit_log_event_type_check
        CHECK (event_type IN (
            'visibility_change',
            'copyright_change',
            'metadata_change',
            'lifecycle_change',
            'legal_hold_set',
            'legal_hold_released'
        ));
