"""Aggiunge la tabella tenant_settings per configurazione archiviazione sostitutiva

Revision ID: 0005
Revises: 0004
Create Date: 2026-03-19 00:00:00.000000

Aggiunge:
  - tenant_settings  (configurazione per-tenant: modalità archivio mock/produzione,
                      credenziali conservatore AgID cifrate)
"""

from alembic import op

revision = "0005"
down_revision = "0004"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.execute("""
        CREATE TABLE tenant_settings (
            id                        UUID        PRIMARY KEY DEFAULT uuid_generate_v4(),
            tenant_id                 UUID        NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,

            -- Archiviazione sostitutiva (Fase 6)
            -- 'mock'       → usa conservatore simulato in locale (default sicuro per dev)
            -- 'production' → usa endpoint reale AgID conservatore
            archival_mode             VARCHAR(20) NOT NULL DEFAULT 'mock',

            -- Identificativo del conservatore (es. 'aruba-cons', 'docuvision', 'mock')
            conservatore_id           VARCHAR(100) NOT NULL DEFAULT 'mock',

            -- URL API conservatore (NULL in modalità mock)
            conservatore_endpoint     TEXT,

            -- Credenziali cifrate AES-256-GCM (NULL in modalità mock)
            conservatore_username_enc TEXT,
            conservatore_password_enc TEXT,

            -- Note operative libere
            archival_notes            TEXT,

            created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
            updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),

            CONSTRAINT uq_tenant_settings_tenant UNIQUE (tenant_id)
        )
    """)
    op.execute("CREATE INDEX idx_tenant_settings_tenant ON tenant_settings (tenant_id)")

    # Trigger updated_at
    op.execute("""
        CREATE TRIGGER trg_tenant_settings_updated_at
            BEFORE UPDATE ON tenant_settings
            FOR EACH ROW EXECUTE FUNCTION set_updated_at()
    """)


def downgrade() -> None:
    op.execute("DROP TABLE IF EXISTS tenant_settings CASCADE")
