"""add sapras tables

Revision ID: sp01_add_sapras
Revises: hk01_no_shift_tipe
Create Date: 2026-04-14

"""
from alembic import op
import sqlalchemy as sa

revision = 'sp01_add_sapras'
down_revision = 'hk01_no_shift_tipe'
branch_labels = None
depends_on = None


def upgrade() -> None:
    # Add sapras to modulenum PostgreSQL enum
    op.execute("ALTER TYPE modulenum ADD VALUE IF NOT EXISTS 'sapras'")

    op.create_table(
        "sapras",
        sa.Column("id", sa.Integer(), primary_key=True),
        sa.Column("spbu_id", sa.Integer(), sa.ForeignKey("master_spbu.id", ondelete="CASCADE"), nullable=False, index=True),
        sa.Column("tanggal", sa.Date(), nullable=False),
        sa.Column("catatan", sa.Text(), nullable=True),
        sa.Column("status", sa.String(20), nullable=False, server_default="pending"),
        sa.Column("uploaded_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True),
        sa.Column("uploaded_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("reviewed_by_id", sa.Integer(), sa.ForeignKey("master_user.id", ondelete="SET NULL"), nullable=True),
        sa.Column("reviewed_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.UniqueConstraint("spbu_id", "tanggal", name="uq_sapras_tanggal"),
    )

    op.create_table(
        "sapras_item",
        sa.Column("id", sa.Integer(), primary_key=True),
        sa.Column("sapras_id", sa.Integer(), sa.ForeignKey("sapras.id", ondelete="CASCADE"), nullable=False, index=True),
        sa.Column("kegiatan", sa.String(1000), nullable=False),
        sa.Column("foto_sebelum_url", sa.String(500), nullable=True),
        sa.Column("foto_sesudah_url", sa.String(500), nullable=True),
        sa.Column("urutan", sa.Integer(), nullable=False, server_default="0"),
    )


def downgrade() -> None:
    op.drop_table("sapras_item")
    op.drop_table("sapras")
    # PostgreSQL does not support removing enum values — no-op for modulenum
