"""rename_tables_master_prefix

Revision ID: f3a1b2c4d5e6
Revises: e57834c99202
Create Date: 2026-04-01 20:00:00.000000

"""
from typing import Sequence, Union

from alembic import op


# revision identifiers, used by Alembic.
revision: str = 'f3a1b2c4d5e6'
down_revision: Union[str, Sequence[str], None] = 'e57834c99202'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


# Mapping: old_name → new_name
TABLE_RENAMES = [
    # Rename independent tables first, then dependents
    ("produk",                  "master_produk"),
    ("users",                   "master_user"),
    ("spbus",                   "master_spbu"),
    ("produk_harga",            "master_produk_harga"),
    ("roles",                   "master_role"),
    ("shifts",                  "master_spbu_shift"),
    ("role_permissions",        "master_role_permission"),
    ("user_spbu_assignments",   "master_user_spbu_assignment"),
    ("islands",                 "master_spbu_island"),
    ("tangkis",                 "master_spbu_tangki"),
    ("tenants",                 "master_spbu_tenant"),
    ("kalibrasi_tangki",        "master_spbu_kalibrasi"),
    ("kontrak_sewa",            "master_spbu_kontrak"),
    ("nozzles",                 "master_spbu_nozzle"),
]

# Mapping: old_index_name → new_index_name
INDEX_RENAMES = [
    ("ix_produk_kode",                          "ix_master_produk_kode"),
    ("ix_users_email",                          "ix_master_user_email"),
    ("ix_spbus_nomor_pertamina",                "ix_master_spbu_nomor_pertamina"),
    ("ix_produk_harga_berlaku_mulai",           "ix_master_produk_harga_berlaku_mulai"),
    ("ix_produk_harga_produk_id",               "ix_master_produk_harga_produk_id"),
    ("ix_roles_spbu_id",                        "ix_master_role_spbu_id"),
    ("ix_shifts_spbu_id",                       "ix_master_spbu_shift_spbu_id"),
    ("ix_role_permissions_role_id",             "ix_master_role_permission_role_id"),
    ("ix_user_spbu_assignments_spbu_id",        "ix_master_user_spbu_assignment_spbu_id"),
    ("ix_user_spbu_assignments_user_id",        "ix_master_user_spbu_assignment_user_id"),
    ("ix_islands_spbu_id",                      "ix_master_spbu_island_spbu_id"),
    ("ix_tangkis_spbu_id",                      "ix_master_spbu_tangki_spbu_id"),
    ("ix_tenants_spbu_id",                      "ix_master_spbu_tenant_spbu_id"),
    ("ix_kalibrasi_tangki_tangki_id",           "ix_master_spbu_kalibrasi_tangki_id"),
    ("ix_kontrak_sewa_tenant_id",               "ix_master_spbu_kontrak_tenant_id"),
    ("ix_nozzles_island_id",                    "ix_master_spbu_nozzle_island_id"),
]


def upgrade() -> None:
    """Rename all master tables to use the master_ prefix convention."""
    for old, new in TABLE_RENAMES:
        op.rename_table(old, new)

    for old_idx, new_idx in INDEX_RENAMES:
        op.execute(f'ALTER INDEX IF EXISTS "{old_idx}" RENAME TO "{new_idx}"')


def downgrade() -> None:
    """Reverse all master table renames."""
    for old_idx, new_idx in INDEX_RENAMES:
        op.execute(f'ALTER INDEX IF EXISTS "{new_idx}" RENAME TO "{old_idx}"')

    for old, new in reversed(TABLE_RENAMES):
        op.rename_table(new, old)
