"""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):
    amount: Decimal
    payment_method: str
    reference: Optional[str] = None
    notes: 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
