"""Schemas for the Rekonsiliasi Harian (daily sounding-based reconciliation) module."""

from datetime import date, datetime
from decimal import Decimal
from typing import Optional

from pydantic import BaseModel, ConfigDict


class RekonsiliasiTangkiResponse(BaseModel):
    """Per-tank reconciliation breakdown."""

    model_config = ConfigDict(from_attributes=True)

    id: int
    tangki_id: int
    tangki_nama: Optional[str] = None
    produk_nama: Optional[str] = None
    stok_awal: Decimal
    penerimaan: Decimal
    pemindahan_in: Decimal
    pemindahan_out: Decimal
    penjualan: Decimal
    stok_teoritis: Decimal
    stok_aktual: Decimal
    losses: Decimal


class RekonsiliasiHarianResponse(BaseModel):
    """Response for a daily reconciliation record."""

    model_config = ConfigDict(from_attributes=True)

    id: int
    spbu_id: int
    tanggal: date
    status: str
    run_by_name: Optional[str] = None
    approved_by_name: Optional[str] = None
    items: list[RekonsiliasiTangkiResponse] = []
    created_at: datetime
    updated_at: datetime


class RekonsiliasiListResponse(BaseModel):
    """Lightweight response for list view (without items)."""

    model_config = ConfigDict(from_attributes=True)

    id: int
    spbu_id: int
    tanggal: date
    status: str
    jumlah_tangki: int = 0
    total_losses: Decimal = Decimal("0")
    run_by_name: Optional[str] = None
    approved_by_name: Optional[str] = None
    created_at: datetime
    updated_at: datetime
