"""Add approval fields to expenses table.

Revision ID: f0i1j2k3l4m5
Revises: e7h8i9j0k1l2
Create Date: 2026-04-12
"""
from alembic import op
import sqlalchemy as sa

revision = "f0i1j2k3l4m5"
down_revision = "e7h8i9j0k1l2"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.add_column("expenses", sa.Column("status", sa.String(20), nullable=False, server_default="draft"))
    op.add_column("expenses", sa.Column("submitted_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True))
    op.add_column("expenses", sa.Column("submitted_at", sa.DateTime(timezone=True), nullable=True))
    op.add_column("expenses", sa.Column("reviewed_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True))
    op.add_column("expenses", sa.Column("reviewed_at", sa.DateTime(timezone=True), nullable=True))
    op.add_column("expenses", sa.Column("catatan_review", sa.Text(), nullable=True))
    op.add_column("expenses", sa.Column("recalled_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True))
    op.add_column("expenses", sa.Column("recalled_at", sa.DateTime(timezone=True), nullable=True))
    op.add_column("expenses", sa.Column("unlocked_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True))
    op.add_column("expenses", sa.Column("unlocked_at", sa.DateTime(timezone=True), nullable=True))
    op.add_column("expenses", sa.Column("unlock_reason", sa.Text(), nullable=True))


def downgrade() -> None:
    for col in ["unlock_reason", "unlocked_at", "unlocked_by_id",
                "recalled_at", "recalled_by_id", "catatan_review",
                "reviewed_at", "reviewed_by_id", "submitted_at",
                "submitted_by_id", "status"]:
        op.drop_column("expenses", col)
