"""
Note schema definitions.
"""

from datetime import datetime
from typing import Optional, List
from pydantic import Field, ConfigDict, BaseModel

from src.apps.base.schemas.common import BaseSchema
from src.apps.users.schemas.user_common import UserResponseSchema


class NoteCreateRequestSchema(BaseModel):
    """Request payload to create a note."""
    description: str = Field(..., description="Note description text")


class NoteUpdateRequestSchema(BaseModel):
    """Request payload to update a note."""
    description: Optional[str] = Field(None, description="Updated note description")


class NoteSchema(BaseSchema):
    """Note response schema."""
    model_config = ConfigDict(from_attributes=True)

    id: int = Field(description="Note ID")
    description: str = Field(description="Note description text")
    created_at: datetime = Field(description="Creation timestamp")
    updated_at: Optional[datetime] = Field(None, description="Last update timestamp")
    deleted_at: Optional[datetime] = Field(None, description="Deletion timestamp")
    created_by_id: Optional[int] = Field(None, description="Creator user ID")
    created_by: Optional[UserResponseSchema] = Field(None, description="Creator user object")
