"""Add provider-neutral Codegen execution snapshots and usage economics.

GitHub is the first provider, but customer billing is expressed only in P2HS
credits. Existing rows receive the Phase 1 GitHub-hosted defaults.
"""
import sqlalchemy as sa
from alembic import op

revision = "188"
down_revision = "187"
branch_labels = None
depends_on = None


def upgrade() -> None:
    snapshot = "codegen_execution_snapshots"
    usage = "codegen_usage"
    for column, typ, default in (
        ("execution_provider", sa.String(32), "'github'"),
        ("execution_target", sa.String(64), "'hosted'"),
        ("runner_class", sa.String(64), "'linux_standard'"),
        ("execution_config_version", sa.String(32), "'1'"),
        ("pricing_version", sa.String(96), "'github-linux-2026-01'"),
    ):
        op.add_column(snapshot, sa.Column(column, typ, nullable=False, server_default=sa.text(default)))
    for column, typ, nullable, default in (
        ("execution_seconds", sa.Integer(), True, None),
        ("execution_provider", sa.String(32), True, None),
        ("execution_target", sa.String(64), True, None),
        ("runner_class", sa.String(64), True, None),
        ("provider_cost_microusd", sa.Integer(), True, None),
        ("execution_credits", sa.Integer(), False, "0"),
        ("execution_pricing_version", sa.String(96), True, None),
    ):
        op.add_column(usage, sa.Column(column, typ, nullable=nullable, server_default=sa.text(default) if default else None))


def downgrade() -> None:
    for column in ("execution_pricing_version", "execution_credits", "provider_cost_microusd", "runner_class", "execution_target", "execution_provider", "execution_seconds"):
        op.drop_column("codegen_usage", column)
    for column in ("pricing_version", "execution_config_version", "runner_class", "execution_target", "execution_provider"):
        op.drop_column("codegen_execution_snapshots", column)
