"""add_maintenance_module_tables

Revision ID: 4ccc98184e7e
Revises: fa7094d4cea7
Create Date: 2026-07-08 12:21:20.012940

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = '4ccc98184e7e'
down_revision: Union[str, None] = 'fa7094d4cea7'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('maintenance_asset',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('name', sa.String(length=200), nullable=False),
    sa.Column('machine_number', sa.Integer(), nullable=True),
    sa.Column('machine_type', sa.String(length=50), nullable=False),
    sa.Column('year_of_commissioning', sa.Integer(), nullable=True),
    sa.Column('location', sa.String(length=200), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
    sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('maintenance_checklist_item',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('machine_type', sa.String(length=50), nullable=False),
    sa.Column('sr_no', sa.Integer(), nullable=True),
    sa.Column('check_point', sa.Text(), nullable=False),
    sa.Column('specification', sa.Text(), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_maintenance_checklist_item_machine_type'), 'maintenance_checklist_item', ['machine_type'], unique=False)
    op.create_table('maintenance_pm_schedule',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('asset_id', sa.UUID(), nullable=False),
    sa.Column('scheduled_date', sa.Date(), nullable=False),
    sa.Column('year', sa.Integer(), nullable=False),
    sa.Column('month', sa.Integer(), nullable=False),
    sa.Column('status', sa.String(length=20), nullable=False),
    sa.Column('completed_date', sa.Date(), nullable=True),
    sa.Column('notes', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
    sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
    sa.ForeignKeyConstraint(['asset_id'], ['maintenance_asset.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('maintenance_record',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('asset_id', sa.UUID(), nullable=False),
    sa.Column('record_date', sa.Date(), nullable=False),
    sa.Column('maintenance_type', sa.String(length=10), nullable=False),
    sa.Column('problem_faced', sa.Text(), nullable=True),
    sa.Column('root_cause', sa.Text(), nullable=True),
    sa.Column('material_used', sa.Text(), nullable=True),
    sa.Column('material_cost', sa.Numeric(precision=12, scale=2), nullable=True),
    sa.Column('time_taken', sa.String(length=50), nullable=True),
    sa.Column('supervisor_name', sa.String(length=150), nullable=True),
    sa.Column('remarks', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
    sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
    sa.ForeignKeyConstraint(['asset_id'], ['maintenance_asset.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('maintenance_record_action',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('record_id', sa.UUID(), nullable=False),
    sa.Column('sr_no', sa.Integer(), nullable=True),
    sa.Column('action_taken', sa.Text(), nullable=False),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
    sa.ForeignKeyConstraint(['record_id'], ['maintenance_record.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('maintenance_record_action')
    op.drop_table('maintenance_record')
    op.drop_table('maintenance_pm_schedule')
    op.drop_index(op.f('ix_maintenance_checklist_item_machine_type'), table_name='maintenance_checklist_item')
    op.drop_table('maintenance_checklist_item')
    op.drop_table('maintenance_asset')
    # ### end Alembic commands ###
