"""add_deleted_at_and_env_mode

Revision ID: b2c3d4e5f6a1
Revises: a1b2c3d4e5f6
Create Date: 2026-04-02 00:00:00.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


revision: str = 'b2c3d4e5f6a1'
down_revision: Union[str, Sequence[str], None] = 'a1b2c3d4e5f6'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None

# Tables that need deleted_at
_TABLES = [
    'master_user',
    'master_role',
    'master_spbu',
    'master_spbu_shift',
    'master_spbu_island',
    'master_spbu_nozzle',
    'master_spbu_tangki',
    'master_spbu_tenant',
    'master_spbu_kontrak',
    'master_produk',
]


def upgrade() -> None:
    for table in _TABLES:
        op.add_column(
            table,
            sa.Column('deleted_at', sa.DateTime(timezone=True), nullable=True),
        )
        op.create_index(f'ix_{table}_deleted_at', table, ['deleted_at'])

    # Seed environment_mode = 'production'
    op.execute(
        "INSERT INTO system_config (key, value) VALUES ('environment_mode', 'production') "
        "ON CONFLICT (key) DO NOTHING"
    )


def downgrade() -> None:
    # Remove the seed row
    op.execute("DELETE FROM system_config WHERE key = 'environment_mode'")

    for table in reversed(_TABLES):
        op.drop_index(f'ix_{table}_deleted_at', table_name=table)
        op.drop_column(table, 'deleted_at')
