"""
Pydantic schemas for Tag model.

Request and response schemas for categorizing and organizing work items.
"""

from datetime import datetime
from typing import Optional
from uuid import UUID

from pydantic import BaseModel, Field


class TagBase(BaseModel):
    """Base schema with shared Tag fields."""

    name: str = Field(..., description="Tag name (unique)")
    category: Optional[str] = Field(None, description="Tag category: technology, client, infrastructure, problem_type, action, service")
    description: Optional[str] = Field(None, description="Description of the tag")
    usage_count: int = Field(0, description="Number of times this tag has been used (auto-incremented)")


class TagCreate(BaseModel):
    """Schema for creating a new Tag. usage_count is not user-provided."""

    name: str = Field(..., description="Tag name (unique)")
    category: Optional[str] = Field(None, description="Tag category: technology, client, infrastructure, problem_type, action, service")
    description: Optional[str] = Field(None, description="Description of the tag")


class TagUpdate(BaseModel):
    """Schema for updating an existing Tag. All fields are optional."""

    name: Optional[str] = Field(None, description="Tag name (unique)")
    category: Optional[str] = Field(None, description="Tag category: technology, client, infrastructure, problem_type, action, service")
    description: Optional[str] = Field(None, description="Description of the tag")
    usage_count: Optional[int] = Field(None, description="Number of times this tag has been used (auto-incremented)")


class TagResponse(TagBase):
    """Schema for Tag responses with ID and timestamps."""

    id: UUID = Field(..., description="Unique identifier for the tag")
    created_at: datetime = Field(..., description="Timestamp when the tag was created")
    updated_at: datetime = Field(..., description="Timestamp when the tag was last updated")

    model_config = {"from_attributes": True}
