"""
Pydantic schemas for WorkItem model.

Request and response schemas for work items tracking session activities.
"""

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

from pydantic import BaseModel, Field


class WorkItemBase(BaseModel):
    """Base schema with shared WorkItem fields."""

    session_id: str = Field(..., description="Foreign key to sessions table (UUID)")
    category: str = Field(
        ...,
        description="Work category: infrastructure, troubleshooting, configuration, development, maintenance, security, documentation"
    )
    title: str = Field(..., description="Brief title of the work item")
    description: str = Field(..., description="Detailed description of the work performed")
    status: str = Field(
        "completed",
        description="Status: completed, in_progress, blocked, pending, deferred"
    )
    priority: Optional[str] = Field(
        None,
        description="Priority level: critical, high, medium, low"
    )
    is_billable: bool = Field(False, description="Whether this work item is billable")
    estimated_minutes: Optional[int] = Field(None, description="Estimated time to complete in minutes")
    actual_minutes: Optional[int] = Field(None, description="Actual time spent in minutes")
    affected_systems: Optional[str] = Field(
        None,
        description='JSON array of affected systems (e.g., ["jupiter", "172.16.3.20"])'
    )
    technologies_used: Optional[str] = Field(
        None,
        description='JSON array of technologies used (e.g., ["docker", "mariadb"])'
    )
    item_order: Optional[int] = Field(None, description="Sequence order within the session")
    completed_at: Optional[datetime] = Field(None, description="When the work item was completed")


class WorkItemCreate(WorkItemBase):
    """Schema for creating a new WorkItem."""
    pass


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

    session_id: Optional[str] = Field(None, description="Foreign key to sessions table (UUID)")
    category: Optional[str] = Field(
        None,
        description="Work category: infrastructure, troubleshooting, configuration, development, maintenance, security, documentation"
    )
    title: Optional[str] = Field(None, description="Brief title of the work item")
    description: Optional[str] = Field(None, description="Detailed description of the work performed")
    status: Optional[str] = Field(
        None,
        description="Status: completed, in_progress, blocked, pending, deferred"
    )
    priority: Optional[str] = Field(
        None,
        description="Priority level: critical, high, medium, low"
    )
    is_billable: Optional[bool] = Field(None, description="Whether this work item is billable")
    estimated_minutes: Optional[int] = Field(None, description="Estimated time to complete in minutes")
    actual_minutes: Optional[int] = Field(None, description="Actual time spent in minutes")
    affected_systems: Optional[str] = Field(
        None,
        description='JSON array of affected systems (e.g., ["jupiter", "172.16.3.20"])'
    )
    technologies_used: Optional[str] = Field(
        None,
        description='JSON array of technologies used (e.g., ["docker", "mariadb"])'
    )
    item_order: Optional[int] = Field(None, description="Sequence order within the session")
    completed_at: Optional[datetime] = Field(None, description="When the work item was completed")


class WorkItemResponse(WorkItemBase):
    """Schema for WorkItem responses with ID and timestamps."""

    id: UUID = Field(..., description="Unique identifier for the work item")
    created_at: datetime = Field(..., description="Timestamp when the work item was created")

    model_config = {"from_attributes": True}
