"""Pydantic schemas for POS Analytics endpoints."""

from datetime import date, datetime
from decimal import Decimal

from pydantic import BaseModel


class PosUploadResponse(BaseModel):
    batch_id: int
    total_rows: int
    tanggal_mulai: date
    tanggal_selesai: date
    total_volume: Decimal
    total_nilai: Decimal
    skipped: int
    suspicious_count: int  # rows with volume=0 or nilai=0, stored but flagged


class PosExistingBatch(BaseModel):
    batch_id: int
    total_rows: int
    tanggal_mulai: date
    tanggal_selesai: date
    uploaded_at: datetime


class PosDuplicateDetail(BaseModel):
    detail: str  # "duplicate_batch"
    existing: PosExistingBatch


class PosCompareDayRow(BaseModel):
    tanggal: date
    volume_pos: Decimal
    nilai_pos: Decimal
    volume_laporan: Decimal
    selisih_volume: Decimal
    selisih_pct: Decimal | None
    is_flagged: bool  # True if |selisih_pct| > threshold


class PosCompareResponse(BaseModel):
    rows: list[PosCompareDayRow]
    total_volume_pos: Decimal
    total_volume_laporan: Decimal


class PosAnomaliItem(BaseModel):
    tipe: str  # "DOUBLE_ISI" | "BURST"
    timestamp: datetime
    plat_nomor: str | None
    no_dispenser: str
    volume: Decimal
    operator_name: str | None
    detail: str  # human-readable explanation


class PosAnomaliResponse(BaseModel):
    items: list[PosAnomaliItem]
    total: int


class PosHourlyRow(BaseModel):
    jam: int  # 0–23
    volume: Decimal
    transaksi_count: int


class PosIslandHourlyRow(BaseModel):
    jam: int
    volume: Decimal
    transaksi_count: int


class PosIslandRow(BaseModel):
    island_raw: str
    nozzle_raw: str | None
    volume: Decimal
    transaksi_count: int
    hourly: list[PosIslandHourlyRow]


class PosShiftSummaryRow(BaseModel):
    shift_id: int | None
    shift_nama: str
    transaksi_count: int
    volume: Decimal


class PosGoldenHoursSummary(BaseModel):
    total_transaksi: int
    total_volume: Decimal
    by_shift: list[PosShiftSummaryRow]


class PosGoldenHoursResponse(BaseModel):
    summary: PosGoldenHoursSummary
    hourly: list[PosHourlyRow]
    by_island: list[PosIslandRow]


class PosBatchListItem(BaseModel):
    id: int
    produk_id: int
    produk_nama: str
    tanggal_mulai: date
    tanggal_selesai: date
    total_rows: int
    total_volume: Decimal
    total_nilai: Decimal
    created_at: datetime
    uploaded_by_name: str | None


class PosTransaksiItem(BaseModel):
    id: int
    timestamp: datetime
    tanggal: date
    plat_nomor: str | None
    no_dispenser: str
    island_raw: str | None
    nozzle_raw: str | None
    volume: Decimal
    nilai: Decimal
    operator_name: str | None
    no_hp: str | None
    nik: str | None
    instansi: str | None
    delivery_type: str | None


class PosBatchTransaksiResponse(BaseModel):
    items: list[PosTransaksiItem]
    total: int
    page: int
    per_page: int


class GoldenHoursInsightRequest(BaseModel):
    tanggal_mulai: date
    tanggal_selesai: date
    produk_id: int


class GoldenHoursInsightResponse(BaseModel):
    insight: str
