from datetime import date
from decimal import Decimal

from pydantic import BaseModel, ConfigDict

from app.models.product import JenisProdukEnum


class ProdukHargaCreate(BaseModel):
    harga: Decimal
    berlaku_mulai: date


class ProdukHargaResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    produk_id: int
    harga: Decimal
    berlaku_mulai: date
    berlaku_sampai: date | None = None


class ProdukBase(BaseModel):
    nama: str
    kode: str
    jenis: JenisProdukEnum
    is_subsidi: bool = False
    kuota_config: dict | None = None
    losses_threshold_penerimaan_pct: Decimal = Decimal("0.150")
    losses_threshold_penjualan_pct: Decimal = Decimal("0.500")


class ProdukCreate(ProdukBase):
    harga_awal: Decimal | None = None
    berlaku_mulai: date | None = None


class ProdukUpdate(BaseModel):
    nama: str | None = None
    kode: str | None = None
    jenis: JenisProdukEnum | None = None
    is_subsidi: bool | None = None
    kuota_config: dict | None = None
    losses_threshold_penerimaan_pct: Decimal | None = None
    losses_threshold_penjualan_pct: Decimal | None = None
    is_active: bool | None = None


class ProdukResponse(ProdukBase):
    model_config = ConfigDict(from_attributes=True)

    id: int
    is_active: bool
    harga_saat_ini: Decimal | None = None
    berlaku_sejak: date | None = None
