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

from pydantic import BaseModel, Field, ConfigDict


NotificationId = typing.NewType("NotificationId", UUID)


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

    id: NotificationId = Field(
        default_factory=uuid.uuid4, description="Unique identifier for the notification"
    )
    read: bool = Field(False, description="Whether the notification has been read")
    message: str = Field(description="The content of the notification")
    timestamp: datetime = Field(
        default_factory=datetime.now, description="The timestamp of the notification"
    )


class MessageNotification(BaseModel):
    """
    Notification type for messages.
    """

    message: str
    title: str
