"""Settings request schemas."""
from decimal import Decimal
from typing import Literal, Optional, Any, Dict
from pydantic import BaseModel, Field, field_validator

from src.core.validators import validate_phone


class FeeItemCreateRequest(BaseModel):
    name: str
    category: str
    description: Optional[str] = None
    unit_price: Decimal
    is_taxable: bool = False
    is_active: bool = True
    sort_order: int = 0


class FeeItemUpdateRequest(BaseModel):
    name: Optional[str] = None
    category: Optional[str] = None
    description: Optional[str] = None
    unit_price: Optional[Decimal] = None
    is_taxable: Optional[bool] = None
    is_active: Optional[bool] = None
    sort_order: Optional[int] = None


class CemeteryProfileUpdateRequest(BaseModel):
    cemetery_type: Optional[str] = None
    contact_email: Optional[str] = None
    contact_phone: Optional[str] = None
    address: Optional[str] = None
    config_json: Optional[Dict[str, Any]] = None

    @field_validator('contact_phone', mode='before')
    @classmethod
    def _validate_phone(cls, v: Optional[str]) -> Optional[str]:
        return validate_phone(v)


class GenerateQRRequest(BaseModel):
    qr_type: Literal['entrance', 'section', 'plot', 'contract']
    reference_id: str = Field(min_length=1, max_length=100)
    display_label: Optional[str] = Field(None, max_length=255)


class RegenerateAllRequest(BaseModel):
    qr_type: Optional[Literal['entrance', 'section', 'plot', 'contract']] = None
