"""Schemas for the site-admin, cross-tenant support ticket queue (INDL-57)."""
from datetime import datetime
from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field, field_validator

from src.core.constants import TicketStatus


class SiteAdminSupportReplyCreate(BaseModel):
    """Request body for POST /site-admin/support/tickets/{id}/messages."""

    model_config = ConfigDict(extra="forbid")

    body: str = Field(..., min_length=1, max_length=5000)

    @field_validator("body")
    @classmethod
    def _validate_body(cls, v: str) -> str:
        if not v.strip():
            raise ValueError("Reply body cannot be blank")
        return v


class SiteAdminSupportStatusUpdate(BaseModel):
    """Request body for PATCH /site-admin/support/tickets/{id}/status.

    `status` is a `TicketStatus` (not a bare `str`), so an unrecognized
    value fails Pydantic validation with a 422 rather than silently
    persisting an invalid status string.
    """

    model_config = ConfigDict(extra="forbid")

    status: TicketStatus


class SiteAdminSupportTicketListItemResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    ticket_number: str
    subject: str
    organization_name: str
    submitted_by: str
    plan: str
    status: str
    created_at: datetime


class SiteAdminSupportMessageResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    author_user_id: UUID
    author_role_snapshot: str
    author_name: str
    body: str
    created_at: datetime


class SiteAdminSupportTicketDetailResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    ticket_number: str
    subject: str
    status: str
    created_at: datetime
    organization_name: str
    plan: str
    messages: list[SiteAdminSupportMessageResponse] = []
