-- =========================================================
-- Migration 148: 5-stufiger Lifecycle für Legal Documents
--
-- Erweitert compliance_legal_document_versions.status um:
--   - review_internal (DSB-interne Pruefung, war vorher implizit 'review')
--   - review_client   (Mandanten-Freigabe-Phase nach DSB-OK)
--
-- Plus CHECK-Constraint, der bisher fehlte (status war freier VARCHAR(20)).
-- 'review' bleibt erlaubt für Rückwärts-Kompatibilität.
--
-- Approvals-Tabelle bekommt neue action-Werte:
--   - submitted_internal | approved_internal
--   - submitted_client   | approved_client
--   - rejected_internal  | rejected_client (zur Differenzierung im Audit)
-- =========================================================

DO $$
BEGIN
    -- Status-CHECK falls noch nicht vorhanden
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint
        WHERE conrelid = 'compliance.compliance_legal_document_versions'::regclass
        AND conname = 'chk_legal_doc_version_status'
    ) THEN
        ALTER TABLE compliance.compliance_legal_document_versions
            ADD CONSTRAINT chk_legal_doc_version_status
            CHECK (status IN (
                'draft',
                'review',           -- backward-compat (deprecated; neuer Code nutzt review_internal/review_client)
                'review_internal',  -- DSB-Phase (NEU)
                'review_client',    -- Mandant-Phase (NEU)
                'approved',
                'published',
                'archived',
                'rejected'
            ));
    END IF;

    -- Approvals-Action-CHECK falls noch nicht vorhanden
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint
        WHERE conrelid = 'compliance.compliance_legal_document_approvals'::regclass
        AND conname = 'chk_legal_doc_approval_action'
    ) THEN
        ALTER TABLE compliance.compliance_legal_document_approvals
            ADD CONSTRAINT chk_legal_doc_approval_action
            CHECK (action IN (
                'created', 'submitted',
                'submitted_internal', 'submitted_client',  -- NEU
                'approved',
                'approved_internal', 'approved_client',    -- NEU
                'rejected',
                'rejected_internal', 'rejected_client',    -- NEU
                'published', 'archived'
            ));
    END IF;
END $$;

-- Neue Felder für 5-stufige Audit-Trail-Anreicherung
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.columns
        WHERE table_schema = 'compliance'
        AND table_name = 'compliance_legal_document_versions'
        AND column_name = 'approved_internal_by'
    ) THEN
        ALTER TABLE compliance.compliance_legal_document_versions
            ADD COLUMN approved_internal_by VARCHAR(200),
            ADD COLUMN approved_internal_at TIMESTAMPTZ,
            ADD COLUMN approved_client_by VARCHAR(200),
            ADD COLUMN approved_client_at TIMESTAMPTZ,
            ADD COLUMN submitted_by VARCHAR(200),
            ADD COLUMN submitted_at TIMESTAMPTZ;
    END IF;
END $$;
