"""Add rekonsiliasi_harian and rekonsiliasi_tangki tables.

Revision ID: p2f3a4b5c6d7
Revises: o1e2f3a4b5c6
Create Date: 2026-04-03
"""
from alembic import op
import sqlalchemy as sa

revision = 'p2f3a4b5c6d7'
down_revision = 'o1e2f3a4b5c6'
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.create_table(
        'rekonsiliasi_harian',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('spbu_id', sa.Integer(),
                  sa.ForeignKey('master_spbu.id', ondelete='CASCADE'),
                  nullable=False),
        sa.Column('tanggal', sa.Date(), nullable=False),
        sa.Column('status', sa.String(20), nullable=False,
                  server_default='pending'),
        sa.Column('run_by_id', sa.Integer(),
                  sa.ForeignKey('master_user.id', ondelete='SET NULL'),
                  nullable=True),
        sa.Column('approved_by_id', sa.Integer(),
                  sa.ForeignKey('master_user.id', ondelete='SET NULL'),
                  nullable=True),
        sa.Column('created_at', sa.DateTime(), server_default=sa.func.now(),
                  nullable=False),
        sa.Column('updated_at', sa.DateTime(), server_default=sa.func.now(),
                  nullable=False),
        sa.UniqueConstraint('spbu_id', 'tanggal',
                            name='uq_rekonsiliasi_spbu_tanggal'),
    )
    op.create_index('ix_rekonsiliasi_spbu_id', 'rekonsiliasi_harian',
                    ['spbu_id'])

    op.create_table(
        'rekonsiliasi_tangki',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('rekonsiliasi_harian_id', sa.Integer(),
                  sa.ForeignKey('rekonsiliasi_harian.id', ondelete='CASCADE'),
                  nullable=False),
        sa.Column('tangki_id', sa.Integer(),
                  sa.ForeignKey('master_spbu_tangki.id', ondelete='RESTRICT'),
                  nullable=False),
        sa.Column('stok_awal', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('penerimaan', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('pemindahan_in', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('pemindahan_out', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('penjualan', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('stok_teoritis', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('stok_aktual', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.Column('losses', sa.Numeric(15, 3), nullable=False,
                  server_default='0'),
        sa.UniqueConstraint('rekonsiliasi_harian_id', 'tangki_id',
                            name='uq_rekonsiliasi_tangki'),
    )


def downgrade() -> None:
    op.drop_table('rekonsiliasi_tangki')
    op.drop_table('rekonsiliasi_harian')
