"""align tenant constraints and model indexes

Revision ID: 4bd596ed5a7a
Revises: 20261004_shop_tenant_keys
Create Date: 2026-10-03 22:32:18.715907

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql

# revision identifiers, used by Alembic.
revision = '4bd596ed5a7a'
down_revision = '20261004_shop_tenant_keys'
branch_labels = None
depends_on = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_index(op.f('ix_audit_logs_action'), 'audit_logs', ['action'], unique=False)
    op.create_index(op.f('ix_audit_logs_created_at'), 'audit_logs', ['created_at'], unique=False)
    op.create_index(op.f('ix_audit_logs_entity_id'), 'audit_logs', ['entity_id'], unique=False)
    op.create_index(op.f('ix_audit_logs_entity_type'), 'audit_logs', ['entity_type'], unique=False)
    op.create_index(op.f('ix_audit_logs_id'), 'audit_logs', ['id'], unique=False)
    op.create_index(op.f('ix_audit_logs_user_id'), 'audit_logs', ['user_id'], unique=False)
    op.drop_index(op.f('name'), table_name='bank_accounts')
    op.create_index(op.f('ix_bank_accounts_id'), 'bank_accounts', ['id'], unique=False)
    op.create_unique_constraint('uq_bank_accounts_shop_name', 'bank_accounts', ['shop_id', 'name'])
    op.create_index(op.f('ix_bank_transactions_id'), 'bank_transactions', ['id'], unique=False)
    op.create_index(op.f('ix_cash_credit_people_id'), 'cash_credit_people', ['id'], unique=False)
    op.create_index(op.f('ix_cash_credit_transactions_id'), 'cash_credit_transactions', ['id'], unique=False)
    op.create_index(op.f('ix_cash_day_closes_date'), 'cash_day_closes', ['date'], unique=False)
    op.create_index(op.f('ix_cash_transactions_id'), 'cash_transactions', ['id'], unique=False)
    op.create_index(op.f('ix_customer_ledger_entries_id'), 'customer_ledger_entries', ['id'], unique=False)
    op.create_index(op.f('ix_customer_payments_id'), 'customer_payments', ['id'], unique=False)
    op.alter_column('expenses', 'subtype',
               existing_type=mysql.VARCHAR(length=64),
               type_=sa.String(length=100),
               existing_nullable=False)
    op.alter_column('expenses', 'custom_subtype',
               existing_type=mysql.VARCHAR(length=200),
               type_=sa.String(length=100),
               existing_nullable=True)
    op.alter_column('expenses', 'description',
               existing_type=mysql.VARCHAR(length=1000),
               type_=sa.String(length=500),
               existing_nullable=True)
    op.create_index(op.f('ix_expenses_id'), 'expenses', ['id'], unique=False)
    op.create_index(op.f('ix_idempotency_records_id'), 'idempotency_records', ['id'], unique=False)
    op.drop_index(op.f('name'), table_name='product_categories')
    op.create_unique_constraint('uq_categories_shop_name', 'product_categories', ['shop_id', 'name'])
    op.create_index(op.f('ix_purchase_items_id'), 'purchase_items', ['id'], unique=False)
    op.create_index(op.f('ix_purchase_return_items_id'), 'purchase_return_items', ['id'], unique=False)
    op.create_index(op.f('ix_purchase_returns_id'), 'purchase_returns', ['id'], unique=False)
    op.drop_index(op.f('purchase_number'), table_name='purchases')
    op.create_index(op.f('ix_purchases_id'), 'purchases', ['id'], unique=False)
    op.create_index(op.f('ix_purchases_purchase_number'), 'purchases', ['purchase_number'], unique=False)
    op.create_index(op.f('ix_sale_items_id'), 'sale_items', ['id'], unique=False)
    op.create_index(op.f('ix_sale_return_items_id'), 'sale_return_items', ['id'], unique=False)
    op.create_index(op.f('ix_sale_returns_id'), 'sale_returns', ['id'], unique=False)
    op.drop_index(op.f('invoice_number'), table_name='sales')
    op.create_index(op.f('ix_sales_id'), 'sales', ['id'], unique=False)
    op.create_index(op.f('ix_sales_invoice_number'), 'sales', ['invoice_number'], unique=False)
    op.create_index(op.f('ix_settings_key'), 'settings', ['key'], unique=False)
    op.create_index(op.f('ix_supplier_ledger_entries_id'), 'supplier_ledger_entries', ['id'], unique=False)
    op.create_index(op.f('ix_supplier_payments_id'), 'supplier_payments', ['id'], unique=False)
    op.drop_index(op.f('email'), table_name='users')
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_index(op.f('email'), 'users', ['email'], unique=True)
    op.drop_index(op.f('ix_supplier_payments_id'), table_name='supplier_payments')
    op.drop_index(op.f('ix_supplier_ledger_entries_id'), table_name='supplier_ledger_entries')
    op.drop_index(op.f('ix_settings_key'), table_name='settings')
    op.drop_index(op.f('ix_sales_invoice_number'), table_name='sales')
    op.drop_index(op.f('ix_sales_id'), table_name='sales')
    op.create_index(op.f('invoice_number'), 'sales', ['invoice_number'], unique=True)
    op.drop_index(op.f('ix_sale_returns_id'), table_name='sale_returns')
    op.drop_index(op.f('ix_sale_return_items_id'), table_name='sale_return_items')
    op.drop_index(op.f('ix_sale_items_id'), table_name='sale_items')
    op.drop_index(op.f('ix_purchases_purchase_number'), table_name='purchases')
    op.drop_index(op.f('ix_purchases_id'), table_name='purchases')
    op.create_index(op.f('purchase_number'), 'purchases', ['purchase_number'], unique=True)
    op.drop_index(op.f('ix_purchase_returns_id'), table_name='purchase_returns')
    op.drop_index(op.f('ix_purchase_return_items_id'), table_name='purchase_return_items')
    op.drop_index(op.f('ix_purchase_items_id'), table_name='purchase_items')
    op.drop_constraint('uq_categories_shop_name', 'product_categories', type_='unique')
    op.create_index(op.f('name'), 'product_categories', ['name'], unique=True)
    op.drop_index(op.f('ix_idempotency_records_id'), table_name='idempotency_records')
    op.drop_index(op.f('ix_expenses_id'), table_name='expenses')
    op.alter_column('expenses', 'description',
               existing_type=sa.String(length=500),
               type_=mysql.VARCHAR(length=1000),
               existing_nullable=True)
    op.alter_column('expenses', 'custom_subtype',
               existing_type=sa.String(length=100),
               type_=mysql.VARCHAR(length=200),
               existing_nullable=True)
    op.alter_column('expenses', 'subtype',
               existing_type=sa.String(length=100),
               type_=mysql.VARCHAR(length=64),
               existing_nullable=False)
    op.drop_index(op.f('ix_customer_payments_id'), table_name='customer_payments')
    op.drop_index(op.f('ix_customer_ledger_entries_id'), table_name='customer_ledger_entries')
    op.drop_index(op.f('ix_cash_transactions_id'), table_name='cash_transactions')
    op.drop_index(op.f('ix_cash_day_closes_date'), table_name='cash_day_closes')
    op.drop_index(op.f('ix_cash_credit_transactions_id'), table_name='cash_credit_transactions')
    op.drop_index(op.f('ix_cash_credit_people_id'), table_name='cash_credit_people')
    op.drop_index(op.f('ix_bank_transactions_id'), table_name='bank_transactions')
    op.drop_constraint('uq_bank_accounts_shop_name', 'bank_accounts', type_='unique')
    op.drop_index(op.f('ix_bank_accounts_id'), table_name='bank_accounts')
    op.create_index(op.f('name'), 'bank_accounts', ['name'], unique=True)
    op.drop_index(op.f('ix_audit_logs_user_id'), table_name='audit_logs')
    op.drop_index(op.f('ix_audit_logs_id'), table_name='audit_logs')
    op.drop_index(op.f('ix_audit_logs_entity_type'), table_name='audit_logs')
    op.drop_index(op.f('ix_audit_logs_entity_id'), table_name='audit_logs')
    op.drop_index(op.f('ix_audit_logs_created_at'), table_name='audit_logs')
    op.drop_index(op.f('ix_audit_logs_action'), table_name='audit_logs')
    # ### end Alembic commands ###
