"""Schemas for the End-to-End reconciliation module."""

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

from pydantic import BaseModel, ConfigDict


class EndToEndCreate(BaseModel):
    """Payload to start a new E2E cycle."""

    tangki_id: int
    dead_stock_awal: Decimal


class EndToEndClose(BaseModel):
    """Payload to close an open E2E cycle."""

    dead_stock_akhir: Decimal


class EndToEndResponse(BaseModel):
    """Response for a single E2E cycle record."""

    model_config = ConfigDict(from_attributes=True)

    id: int
    spbu_id: int
    tangki_id: int
    tangki_nama: Optional[str] = None
    produk_nama: Optional[str] = None
    status: str
    tanggal_mulai: date
    tanggal_selesai: Optional[date] = None
    dead_stock_awal: Decimal
    dead_stock_akhir: Optional[Decimal] = None
    total_penerimaan: Decimal
    total_penjualan: Decimal
    total_pemindahan_in: Decimal
    total_pemindahan_out: Decimal
    losses_aktual: Optional[Decimal] = None
    losses_pct: Optional[Decimal] = None
    started_by_name: Optional[str] = None
    closed_by_name: Optional[str] = None
    created_at: datetime
    updated_at: datetime


class EndToEndDetailResponse(EndToEndResponse):
    """Extended response with live running totals (for open cycles)."""

    running_penerimaan: Decimal = Decimal("0")
    running_penjualan: Decimal = Decimal("0")
    running_pemindahan_in: Decimal = Decimal("0")
    running_pemindahan_out: Decimal = Decimal("0")
