"""Schemas for stage transition and mark-lost endpoints."""
from typing import Optional

from pydantic import BaseModel, Field, field_validator

VALID_LOSS_REASONS = {"price", "timing", "competitor", "unresponsive", "other"}


class StageTransitionRequest(BaseModel):
    stage: str


class MarkLostRequest(BaseModel):
    loss_reason: str
    loss_notes: Optional[str] = Field(default=None, max_length=2000)

    @field_validator("loss_reason")
    @classmethod
    def validate_reason(cls, v: str) -> str:
        if v not in VALID_LOSS_REASONS:
            raise ValueError(
                f"loss_reason must be one of: {', '.join(sorted(VALID_LOSS_REASONS))}"
            )
        return v
