"""Add admin-configurable Premium tables (Premium Management v2).

Three configuration tables — payment settings, plans and features — so Premium
payment details, pricing and benefit copy are edited in the Admin Panel instead
of hardcoded in source/templates. No change to activation/approval.

Revision ID: a3c5e7b9d1f0
Revises: f2d4b6c8a0e1
Create Date: 2026-07-04

"""
from alembic import op
import sqlalchemy as sa


revision = "a3c5e7b9d1f0"
down_revision = "f2d4b6c8a0e1"
branch_labels = None
depends_on = None

_BIGINT = sa.BigInteger().with_variant(sa.Integer(), "sqlite")


def upgrade():
    op.create_table(
        "premium_payment_settings",
        sa.Column("active_upi_id", sa.String(length=120), nullable=True),
        sa.Column("bank_name", sa.String(length=120), nullable=True),
        sa.Column("account_holder", sa.String(length=120), nullable=True),
        sa.Column("account_number", sa.String(length=40), nullable=True),
        sa.Column("ifsc", sa.String(length=20), nullable=True),
        sa.Column("cash_instructions", sa.Text(), nullable=True),
        sa.Column("enable_upi", sa.Boolean(), server_default="1", nullable=False),
        sa.Column("enable_bank", sa.Boolean(), server_default="1", nullable=False),
        sa.Column("enable_cash", sa.Boolean(), server_default="1", nullable=False),
        sa.Column("support_email", sa.String(length=120), nullable=True),
        sa.Column("support_phone", sa.String(length=40), nullable=True),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.Column("updated_at", sa.DateTime(), nullable=False),
        sa.Column("id", _BIGINT, autoincrement=True, nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "premium_plans",
        sa.Column("name", sa.String(length=50), nullable=False),
        sa.Column("duration_days", sa.Integer(), nullable=False),
        sa.Column("price", sa.Numeric(precision=10, scale=2), nullable=False),
        sa.Column("description", sa.String(length=300), nullable=True),
        sa.Column("enabled", sa.Boolean(), server_default="1", nullable=False),
        sa.Column("sort_order", sa.Integer(), server_default="0", nullable=False),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.Column("updated_at", sa.DateTime(), nullable=False),
        sa.Column("id", _BIGINT, autoincrement=True, nullable=False),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("name", name="uq_premium_plans_name"),
    )
    with op.batch_alter_table("premium_plans", schema=None) as batch_op:
        batch_op.create_index("ix_premium_plans_sort_order", ["sort_order"], unique=False)

    op.create_table(
        "premium_features",
        sa.Column("title", sa.String(length=80), nullable=False),
        sa.Column("description", sa.String(length=300), nullable=True),
        sa.Column("icon", sa.String(length=60), nullable=True),
        sa.Column("enabled", sa.Boolean(), server_default="1", nullable=False),
        sa.Column("display_order", sa.Integer(), server_default="0", nullable=False),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.Column("updated_at", sa.DateTime(), nullable=False),
        sa.Column("id", _BIGINT, autoincrement=True, nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )
    with op.batch_alter_table("premium_features", schema=None) as batch_op:
        batch_op.create_index("ix_premium_features_display_order", ["display_order"], unique=False)

    # Admin review note (reason) on a premium request.
    with op.batch_alter_table("premium_requests", schema=None) as batch_op:
        batch_op.add_column(sa.Column("review_note", sa.Text(), nullable=True))


def downgrade():
    with op.batch_alter_table("premium_requests", schema=None) as batch_op:
        batch_op.drop_column("review_note")
    op.drop_table("premium_features")
    op.drop_table("premium_plans")
    op.drop_table("premium_payment_settings")
