"""Move catalog messaging from project quotas to credits.

Revision ID: 084
Revises: 083
"""
from collections.abc import Sequence

from alembic import op

revision: str = "084"
down_revision: str | None = "083"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    op.create_index(
        "idx_workspace_credit_ledger_source",
        "workspace_credit_ledger",
        ["workspace_id", "source_type", "source_id", "created_at"],
    )
    op.execute("""
        UPDATE subscription_plans
        SET limits = (COALESCE(limits, '{}'::jsonb) - 'max_projects')
        WHERE limits ? 'max_projects';
    """)
    op.execute("""
        UPDATE subscription_plans
        SET limits = COALESCE(limits, '{}'::jsonb) || '{"included_ai_units": 5}'::jsonb
        WHERE LOWER(slug) = 'free';
    """)


def downgrade() -> None:
    # Project-count quotas were intentionally removed; restoring guessed limits would
    # corrupt plan policy, so only remove the new free starter-credit setting.
    op.execute("""
        UPDATE subscription_plans
        SET limits = limits - 'included_ai_units'
        WHERE LOWER(slug) = 'free';
    """)
    op.drop_index("idx_workspace_credit_ledger_source", table_name="workspace_credit_ledger")
