"""Billing request schemas."""
from datetime import date
from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, field_validator


class InvoiceCreateRequest(BaseModel):
    record_id: Optional[str] = None
    contract_id: Optional[str] = None
    due_date: date
    notes: Optional[str] = None


class InvoiceUpdateRequest(BaseModel):
    due_date: Optional[date] = None
    notes: Optional[str] = None


class RecordPaymentRequest(BaseModel):
    invoice_id: Optional[str] = None  # for the standalone record-payment modal
    amount: Decimal
    payment_date: date
    payment_method: str  # Cash / Cheque / E-transfer / Stripe / Moneris
    reference_number: Optional[str] = None

    @field_validator("amount")
    @classmethod
    def amount_positive(cls, v: Decimal) -> Decimal:
        if v <= 0:
            raise ValueError("Amount must be positive")
        return v


class InvoiceListParams(BaseModel):
    search: Optional[str] = None
    status: Optional[str] = None
    page: int = 1
    page_size: int = 20
