"""Add distinct incoming material models

Revision ID: c1f8187cebb8
Revises: 7c985bcef3a6
Create Date: 2026-07-16 14:44:38.855716

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'c1f8187cebb8'
down_revision: Union[str, None] = '7c985bcef3a6'
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_diesel_record',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('entry_date', sa.Date(), nullable=False),
    sa.Column('dg_set_no', sa.String(length=50), nullable=False),
    sa.Column('diesel_ltr', sa.Numeric(precision=10, scale=2), nullable=False),
    sa.Column('oil_ltr', sa.Numeric(precision=10, scale=2), nullable=True),
    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_index(op.f('ix_maintenance_diesel_record_entry_date'), 'maintenance_diesel_record', ['entry_date'], unique=False)
    op.create_table('maintenance_lpg_gas_record',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('entry_date', sa.Date(), nullable=False),
    sa.Column('gas_name', sa.String(length=100), nullable=False),
    sa.Column('quantity', sa.Integer(), nullable=False),
    sa.Column('kg', sa.Numeric(precision=10, scale=2), nullable=False),
    sa.Column('price', sa.Numeric(precision=12, scale=2), nullable=True),
    sa.Column('total_amount', sa.Numeric(precision=14, scale=2), nullable=True),
    sa.Column('bill_no', sa.String(length=100), nullable=True),
    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_index(op.f('ix_maintenance_lpg_gas_record_entry_date'), 'maintenance_lpg_gas_record', ['entry_date'], unique=False)
    op.create_table('maintenance_solar_record',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('entry_date', sa.Date(), nullable=False),
    sa.Column('part_name', sa.String(length=200), nullable=False),
    sa.Column('quantity', sa.Numeric(precision=10, scale=2), nullable=False),
    sa.Column('price', sa.Numeric(precision=12, scale=2), nullable=False),
    sa.Column('total_amount', sa.Numeric(precision=14, scale=2), nullable=False),
    sa.Column('bill_no', sa.String(length=100), nullable=True),
    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_index(op.f('ix_maintenance_solar_record_entry_date'), 'maintenance_solar_record', ['entry_date'], unique=False)
    
    bind = op.get_bind()
    inspector = sa.inspect(bind)
    tables = inspector.get_table_names()
    if 'maintenance_incoming_material' not in tables:
        op.create_table(
            'maintenance_incoming_material',
            sa.Column('id', sa.UUID(), nullable=False, primary_key=True),
            sa.Column('entry_date', sa.Date(), nullable=False),
            sa.Column('vendor', sa.String(length=200), nullable=True),
            sa.Column('category', sa.String(length=100), nullable=True),
            sa.Column('material_name', sa.String(length=300), nullable=False),
            sa.Column('quantity', sa.Numeric(precision=18, scale=3), nullable=False),
            sa.Column('rate', sa.Numeric(precision=18, scale=2), nullable=True),
            sa.Column('total_amount', sa.Numeric(precision=18, scale=2), nullable=True),
            sa.Column('bill_no', sa.String(length=100), nullable=True),
            sa.Column('discount', sa.Numeric(precision=18, scale=2), nullable=True),
            sa.Column('challan_no', sa.String(length=100), 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)
        )
        op.create_index(op.f('ix_maintenance_incoming_material_entry_date'), 'maintenance_incoming_material', ['entry_date'], unique=False)
    else:
        op.add_column('maintenance_incoming_material', sa.Column('discount', sa.Numeric(precision=10, scale=2), nullable=True))
        op.add_column('maintenance_incoming_material', sa.Column('challan_no', sa.String(length=100), nullable=True))
        op.alter_column('maintenance_incoming_material', 'vendor',
                   existing_type=sa.VARCHAR(length=200),
                   nullable=True)
        op.alter_column('maintenance_incoming_material', 'category',
                   existing_type=sa.VARCHAR(length=100),
                   nullable=True)
        op.alter_column('maintenance_incoming_material', 'rate',
                   existing_type=sa.NUMERIC(precision=12, scale=2),
                   nullable=True)
        op.alter_column('maintenance_incoming_material', 'total_amount',
                   existing_type=sa.NUMERIC(precision=14, scale=2),
                   nullable=True)
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('maintenance_incoming_material', 'total_amount',
               existing_type=sa.NUMERIC(precision=14, scale=2),
               nullable=False)
    op.alter_column('maintenance_incoming_material', 'rate',
               existing_type=sa.NUMERIC(precision=12, scale=2),
               nullable=False)
    op.alter_column('maintenance_incoming_material', 'category',
               existing_type=sa.VARCHAR(length=100),
               nullable=False)
    op.alter_column('maintenance_incoming_material', 'vendor',
               existing_type=sa.VARCHAR(length=200),
               nullable=False)
    op.drop_column('maintenance_incoming_material', 'challan_no')
    op.drop_column('maintenance_incoming_material', 'discount')
    op.drop_index(op.f('ix_maintenance_solar_record_entry_date'), table_name='maintenance_solar_record')
    op.drop_table('maintenance_solar_record')
    op.drop_index(op.f('ix_maintenance_lpg_gas_record_entry_date'), table_name='maintenance_lpg_gas_record')
    op.drop_table('maintenance_lpg_gas_record')
    op.drop_index(op.f('ix_maintenance_diesel_record_entry_date'), table_name='maintenance_diesel_record')
    op.drop_table('maintenance_diesel_record')
    # ### end Alembic commands ###
