"""fix_penjualan_fk_constraints

Revision ID: 96ace16eb059
Revises: b3a3165ce53d
Create Date: 2026-04-18 17:11:08.659443

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


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


def upgrade() -> None:
    # Fix missing ondelete on new laporan_shift FK columns
    # Drop existing FK constraints first, then recreate with ondelete=SET NULL

    # for_approval_by_id
    op.drop_constraint('laporan_shift_for_approval_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(
        'laporan_shift_for_approval_by_id_fkey',
        'laporan_shift', 'master_user',
        ['for_approval_by_id'], ['id'],
        ondelete='SET NULL'
    )

    # rejected_by_id
    op.drop_constraint('laporan_shift_rejected_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(
        'laporan_shift_rejected_by_id_fkey',
        'laporan_shift', 'master_user',
        ['rejected_by_id'], ['id'],
        ondelete='SET NULL'
    )

    # pulled_back_by_id
    op.drop_constraint('laporan_shift_pulled_back_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(
        'laporan_shift_pulled_back_by_id_fkey',
        'laporan_shift', 'master_user',
        ['pulled_back_by_id'], ['id'],
        ondelete='SET NULL'
    )

    # island_id on laporan_shift_island_foto — add ondelete=CASCADE
    op.drop_constraint('laporan_shift_island_foto_island_id_fkey', 'laporan_shift_island_foto', type_='foreignkey')
    op.create_foreign_key(
        'laporan_shift_island_foto_island_id_fkey',
        'laporan_shift_island_foto', 'master_spbu_island',
        ['island_id'], ['id'],
        ondelete='CASCADE'
    )


def downgrade() -> None:
    # Revert to no ondelete (just drop and recreate without ondelete)
    op.drop_constraint('laporan_shift_island_foto_island_id_fkey', 'laporan_shift_island_foto', type_='foreignkey')
    op.create_foreign_key(None, 'laporan_shift_island_foto', 'master_spbu_island', ['island_id'], ['id'])

    op.drop_constraint('laporan_shift_pulled_back_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(None, 'laporan_shift', 'master_user', ['pulled_back_by_id'], ['id'])

    op.drop_constraint('laporan_shift_rejected_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(None, 'laporan_shift', 'master_user', ['rejected_by_id'], ['id'])

    op.drop_constraint('laporan_shift_for_approval_by_id_fkey', 'laporan_shift', type_='foreignkey')
    op.create_foreign_key(None, 'laporan_shift', 'master_user', ['for_approval_by_id'], ['id'])
