"""Architecture Lane Visualization+Calculation: calculator-only Feature Pack.

No entity, no chart_definition, no calculator_definition Cloud record.
Revision ID: 163
Revises: 162
"""
from uuid import uuid4

import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects.postgresql import JSONB, UUID, insert

revision = "163"
down_revision = "162"
branch_labels = None
depends_on = None

feature_packs = sa.table(
    "feature_packs",
    sa.column("id", UUID(as_uuid=True)),
    sa.column("slug", sa.String),
    sa.column("name", sa.String),
    sa.column("description", sa.Text),
    sa.column("version", sa.String),
    sa.column("tags", JSONB),
    sa.column("status", sa.String),
    sa.column("composition", JSONB),
    sa.column("input_schema", JSONB),
    sa.column("access_policy", JSONB),
)


def mortgage_composition() -> dict:
    from src.domain.feature_packs.normalize import stamp_composition

    return stamp_composition(
        "calculator-mortgage",
        {"function_slugs": [], "connector_actions": [], "requires": [], "entities": []},
        implementation_version="1.0.0",
    )


def upgrade() -> None:
    op.get_bind().execute(
        insert(feature_packs)
        .values(
            id=uuid4(),
            slug="calculator-mortgage",
            name="Mortgage Calculator",
            version="1.0.0",
            description=(
                "Informational mortgage payment calculator. Ships Calculation IR only; "
                "no persistence entity. Local execution. Not authoritative billing."
            ),
            tags=["calculator", "visualization"],
            status="active",
            composition=mortgage_composition(),
            input_schema={"type": "object", "properties": {}},
            access_policy={"minimum_plan": "free"},
        )
        .on_conflict_do_nothing(index_elements=["slug"])
    )


def downgrade() -> None:
    pass
