"""
Pydantic schemas for the Scheduler API.

These mirror the GraphQL input/output types defined in the PHP codebase
(CreateSchedulerMutation args, UpdateSchedulerMutation args, SchedulerType fields).
"""

from typing import Optional
from pydantic import BaseModel, Field


# ---------------------------------------------------------------------------
# Request schemas
# ---------------------------------------------------------------------------

class CreateSchedulerRequest(BaseModel):
    """Matches CreateSchedulerMutation args."""
    date: str = Field(..., description="Game date (YYYY-MM-DD)")
    time: str = Field(..., description="Start time (HH:MM:SS or HH:MM)")
    home: str = Field(..., description="Home team name")
    away: str = Field(..., description="Away team name")
    location: str = Field(..., description="Location / resource name")
    division: str = Field(..., description="Division / level description")


class UpdateSchedulerRequest(BaseModel):
    """Matches UpdateSchedulerMutation args (all optional)."""
    date: Optional[str] = Field(None, description="Game date")
    time: Optional[str] = Field(None, description="Start time")
    home: Optional[str] = Field(None, description="Home team name")
    away: Optional[str] = Field(None, description="Away team name")
    location: Optional[str] = Field(None, description="Location / resource name")
    division: Optional[str] = Field(None, description="Division / level description")


# ---------------------------------------------------------------------------
# Response schemas
# ---------------------------------------------------------------------------

class SchedulerResponse(BaseModel):
    """Matches the SchedulerType fields resolved in PHP."""
    id: int
    date: Optional[str] = None
    time: Optional[str] = None
    home: Optional[str] = None
    away: Optional[str] = None
    location: Optional[str] = None
    division: Optional[str] = None
    created_at: Optional[str] = None
    updated_at: Optional[str] = None


class PaginatedSchedulerResponse(BaseModel):
    """Wraps a paginated list of scheduler entries."""
    data: list[SchedulerResponse]
    total: int
    page: int
    per_page: int


class DeleteResponse(BaseModel):
    """Simple boolean result for delete operations."""
    success: bool
    message: str = ""
