"""billing_customers mirror table (Vision + Tajri maXim panels)

Revision ID: b1ll1ngcu5t0m3r5
Revises: d4e5g6h7i8j9
Create Date: 2026-09-19

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa

revision: str = 'b1ll1ngcu5t0m3r5'
down_revision: Union[str, None] = 'd4e5g6h7i8j9'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.create_table(
        'billing_customers',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('provider', sa.String(length=20), nullable=False),
        sa.Column('pop', sa.String(length=120), nullable=False),
        sa.Column('external_id', sa.String(length=30), nullable=False),
        sa.Column('cust_id', sa.String(length=30), nullable=True),
        sa.Column('username', sa.String(length=80), nullable=True),
        sa.Column('password', sa.String(length=80), nullable=True),
        sa.Column('name', sa.String(length=150), nullable=False, server_default=''),
        sa.Column('package', sa.String(length=40), nullable=True),
        sa.Column('balance', sa.String(length=40), nullable=True),
        sa.Column('exp_date', sa.String(length=60), nullable=True),
        sa.Column('last_logout', sa.String(length=40), nullable=True),
        sa.Column('mobile', sa.String(length=30), nullable=True),
        sa.Column('created', sa.String(length=40), nullable=True),
        sa.Column('status', sa.String(length=30), nullable=True),
        sa.Column('flat_level', sa.String(length=120), nullable=True),
        sa.Column('house', sa.String(length=120), nullable=True),
        sa.Column('road', sa.String(length=120), nullable=True),
        sa.Column('area', sa.String(length=120), nullable=True),
        sa.Column('ip', sa.String(length=60), nullable=True),
        sa.Column('group', sa.String(length=60), nullable=True),
        sa.Column('net_bill', sa.String(length=40), nullable=True),
        sa.Column('vlan_box', sa.String(length=80), nullable=True),
        sa.Column('nid', sa.String(length=40), nullable=True),
        sa.Column('email', sa.String(length=255), nullable=True),
        sa.Column('discount', sa.String(length=40), nullable=True),
        sa.Column('bill_cycle', sa.String(length=40), nullable=True),
        sa.Column('remarks', sa.Text(), nullable=True),
        sa.Column('district', sa.String(length=80), nullable=True),
        sa.Column('thana', sa.String(length=80), nullable=True),
        sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
        sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
        sa.PrimaryKeyConstraint('id', name=op.f('pk_billing_customers')),
        sa.UniqueConstraint('provider', 'external_id', name=op.f('uq_billing_customers_provider_external')),
    )
    op.create_index(op.f('ix_billing_customers_provider'), 'billing_customers', ['provider'], unique=False)
    op.create_index(op.f('ix_billing_customers_pop'), 'billing_customers', ['pop'], unique=False)
    op.create_index(op.f('ix_billing_customers_external_id'), 'billing_customers', ['external_id'], unique=False)
    op.create_index(op.f('ix_billing_customers_username'), 'billing_customers', ['username'], unique=False)
    op.create_index(op.f('ix_billing_customers_mobile'), 'billing_customers', ['mobile'], unique=False)
    op.create_index(op.f('ix_billing_customers_status'), 'billing_customers', ['status'], unique=False)
    op.create_index('ix_billing_customers_provider_pop', 'billing_customers', ['provider', 'pop'], unique=False)


def downgrade() -> None:
    op.drop_index('ix_billing_customers_provider_pop', table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_status'), table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_mobile'), table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_username'), table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_external_id'), table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_pop'), table_name='billing_customers')
    op.drop_index(op.f('ix_billing_customers_provider'), table_name='billing_customers')
    op.drop_table('billing_customers')
