"""Schemas for the Dashboard summary endpoint."""

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

from pydantic import BaseModel


class DashboardTangkiStatus(BaseModel):
    tangki_id: int
    tangki_nama: str
    produk_nama: Optional[str] = None
    kapasitas_liter: Decimal
    volume_terakhir: Optional[Decimal] = None
    persen_isi: Optional[Decimal] = None


class DashboardProdukSales(BaseModel):
    produk_id: int
    produk_nama: str
    produk_kode: str
    total_volume: Decimal
    total_nilai: Decimal


class DashboardShiftStatus(BaseModel):
    shift_id: int
    shift_nama: str
    laporan_status: Optional[str] = None
    stock_status: Optional[str] = None


class DashboardPenebusanPending(BaseModel):
    id: int
    no_do: Optional[str] = None
    status: str
    tanggal: date
    total_volume: Decimal


class DashboardSummary(BaseModel):
    """Aggregated dashboard data for a date range."""

    tanggal_mulai: date
    tanggal_akhir: date

    # KPIs
    total_penjualan_volume: Decimal = Decimal("0")
    total_penjualan_nilai: Decimal = Decimal("0")
    total_expenses: Decimal = Decimal("0")
    total_penyetoran: Decimal = Decimal("0")
    total_penerimaan_volume: Decimal = Decimal("0")

    # Per-product sales breakdown
    produk_sales: list[DashboardProdukSales] = []

    # Tank status (latest sounding)
    tangki_status: list[DashboardTangkiStatus] = []

    # Shift status for today
    shift_status: list[DashboardShiftStatus] = []

    # Pending penebusan (DO belum fully received)
    penebusan_pending: list[DashboardPenebusanPending] = []

    # Counts
    anomali_count: int = 0
    laporan_pending_count: int = 0
