"""Add Plytix attribute catalog table.

Revision ID: 0026_add_plytix_attribute_catalog
Revises: 0025_add_master_catalog_tables
Create Date: 2026-06-03 00:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import JSONB

revision = "0026_add_plytix_attribute_catalog"
down_revision = "0025_add_master_catalog_tables"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.create_table(
        "plytix_attribute_catalog",
        sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
        sa.Column("source_label", sa.String(128), nullable=False, server_default="plytix"),
        sa.Column("attribute_code", sa.String(255), nullable=False),
        sa.Column("label", sa.Text(), nullable=True),
        sa.Column("data_type", sa.String(64), nullable=True),
        sa.Column("group_name", sa.Text(), nullable=True),
        sa.Column("destination_hint", sa.String(32), nullable=True),
        sa.Column("is_required", sa.Boolean(), nullable=True),
        sa.Column("is_active", sa.Boolean(), nullable=False, server_default=sa.true()),
        sa.Column("raw_payload", JSONB, nullable=True),
        sa.Column("imported_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
        sa.UniqueConstraint("source_label", "attribute_code", name="uq_plytix_attribute_catalog_source_code"),
    )
    op.create_index("ix_plytix_attribute_catalog_code", "plytix_attribute_catalog", ["attribute_code"])


def downgrade() -> None:
    op.drop_index("ix_plytix_attribute_catalog_code", table_name="plytix_attribute_catalog")
    op.drop_table("plytix_attribute_catalog")
