"""add 3tier approval fields to stock_adjustment

Revision ID: 2233d47e33a5
Revises: a1b2c3d4e5f7
Create Date: 2026-04-19 14:21:52.656825

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa

revision: str = '2233d47e33a5'
down_revision: Union[str, Sequence[str], None] = 'a1b2c3d4e5f7'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.add_column('stock_adjustment', sa.Column('for_approval_by_id', sa.Integer(), nullable=True))
    op.add_column('stock_adjustment', sa.Column('for_approval_at', sa.DateTime(timezone=True), nullable=True))
    op.add_column('stock_adjustment', sa.Column('pulled_back_by_id', sa.Integer(), nullable=True))
    op.add_column('stock_adjustment', sa.Column('pulled_back_at', sa.DateTime(timezone=True), nullable=True))
    op.add_column('stock_adjustment', sa.Column('pulled_back_reason', sa.Text(), nullable=True))
    op.add_column('stock_adjustment', sa.Column('rejected_by_id', sa.Integer(), nullable=True))
    op.add_column('stock_adjustment', sa.Column('rejected_at', sa.DateTime(timezone=True), nullable=True))
    op.add_column('stock_adjustment', sa.Column('rejected_reason', sa.Text(), nullable=True))
    op.create_foreign_key(None, 'stock_adjustment', 'master_user', ['for_approval_by_id'], ['id'], ondelete='SET NULL')
    op.create_foreign_key(None, 'stock_adjustment', 'master_user', ['pulled_back_by_id'], ['id'], ondelete='SET NULL')
    op.create_foreign_key(None, 'stock_adjustment', 'master_user', ['rejected_by_id'], ['id'], ondelete='SET NULL')


def downgrade() -> None:
    op.drop_constraint(None, 'stock_adjustment', type_='foreignkey')
    op.drop_constraint(None, 'stock_adjustment', type_='foreignkey')
    op.drop_constraint(None, 'stock_adjustment', type_='foreignkey')
    op.drop_column('stock_adjustment', 'rejected_reason')
    op.drop_column('stock_adjustment', 'rejected_at')
    op.drop_column('stock_adjustment', 'rejected_by_id')
    op.drop_column('stock_adjustment', 'pulled_back_reason')
    op.drop_column('stock_adjustment', 'pulled_back_at')
    op.drop_column('stock_adjustment', 'pulled_back_by_id')
    op.drop_column('stock_adjustment', 'for_approval_at')
    op.drop_column('stock_adjustment', 'for_approval_by_id')
