"""add_chassis_arrival_document_and_customer_supplied_part

Revision ID: a7f8e9d0c1b2
Revises: 5e34218e79a5
Create Date: 2026-07-29 13:35:00.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision: str = 'a7f8e9d0c1b2'
down_revision: Union[str, None] = '5e34218e79a5'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # Create chassis_arrival_document table if it does not exist
    op.create_table(
        'chassis_arrival_document',
        sa.Column('doc_id', postgresql.UUID(as_uuid=True), primary_key=True),
        sa.Column('chassis_id', postgresql.UUID(as_uuid=True), sa.ForeignKey('chassis_master.chassis_id'), nullable=False),
        sa.Column('document_type', sa.String(length=30), nullable=False),
        sa.Column('document_number', sa.String(length=100), nullable=True),
        sa.Column('issue_date', sa.Date(), nullable=True),
        sa.Column('valid_until', sa.Date(), nullable=True),
        sa.Column('issuing_authority', sa.String(length=150), nullable=True),
        sa.Column('file_path', sa.String(length=500), nullable=True),
        sa.Column('verification_status', sa.String(length=20), nullable=False, server_default='RECEIVED'),
        sa.Column('rejection_reason', sa.Text(), nullable=True),
        sa.Column('verified_by', postgresql.UUID(as_uuid=True), sa.ForeignKey('login_users.user_id'), nullable=True),
        sa.Column('verified_at', sa.DateTime(timezone=True), nullable=True),
        sa.Column('created_at', sa.DateTime(timezone=True), nullable=True),
    )

    # Create customer_supplied_part table if it does not exist
    op.create_table(
        'customer_supplied_part',
        sa.Column('csp_id', postgresql.UUID(as_uuid=True), primary_key=True),
        sa.Column('chassis_id', postgresql.UUID(as_uuid=True), sa.ForeignKey('chassis_master.chassis_id'), nullable=False),
        sa.Column('rm_id', postgresql.UUID(as_uuid=True), sa.ForeignKey('rm_master.rm_id'), nullable=True),
        sa.Column('item_description', sa.String(length=255), nullable=False),
        sa.Column('item_code', sa.String(length=100), nullable=True),
        sa.Column('quantity_received', sa.Numeric(precision=14, scale=3), nullable=False),
        sa.Column('quantity_verified', sa.Numeric(precision=14, scale=3), nullable=True),
        sa.Column('unit_of_measurement', sa.String(length=50), nullable=True),
        sa.Column('target_station', sa.String(length=30), nullable=True),
        sa.Column('storage_location', sa.String(length=100), nullable=True),
        sa.Column('status', sa.String(length=25), nullable=False, server_default='RECEIVED'),
        sa.Column('damaged_qty', sa.Numeric(precision=14, scale=3), nullable=True),
        sa.Column('damage_description', sa.Text(), nullable=True),
        sa.Column('issued_to_station', sa.String(length=30), nullable=True),
        sa.Column('issued_at', sa.DateTime(timezone=True), nullable=True),
        sa.Column('issued_by', postgresql.UUID(as_uuid=True), sa.ForeignKey('login_users.user_id'), nullable=True),
        sa.Column('received_by', postgresql.UUID(as_uuid=True), sa.ForeignKey('login_users.user_id'), nullable=True),
        sa.Column('received_at', sa.DateTime(timezone=True), nullable=True),
        sa.Column('notes', sa.Text(), nullable=True),
        sa.Column('created_at', sa.DateTime(timezone=True), nullable=True),
    )


def downgrade() -> None:
    op.drop_table('customer_supplied_part')
    op.drop_table('chassis_arrival_document')
