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


class Article(BaseModel):
    id: str = Field(default_factory=lambda: str(uuid.uuid4()))
    title: str
    slug: str
    excerpt: str
    content: str
    author: str = "Margot Silva"
    category: str
    tags: List[str]
    imageUrl: str
    featured: bool = False
    publishedAt: datetime = Field(default_factory=datetime.utcnow)
    createdAt: datetime = Field(default_factory=datetime.utcnow)
    updatedAt: datetime = Field(default_factory=datetime.utcnow)


class ArticleCreate(BaseModel):
    title: str
    slug: str
    excerpt: str
    content: str
    category: str
    tags: List[str]
    imageUrl: str
    featured: bool = False


class ArticleUpdate(BaseModel):
    title: Optional[str] = None
    slug: Optional[str] = None
    excerpt: Optional[str] = None
    content: Optional[str] = None
    category: Optional[str] = None
    tags: Optional[List[str]] = None
    imageUrl: Optional[str] = None
    featured: Optional[bool] = None


class Category(BaseModel):
    id: str = Field(default_factory=lambda: str(uuid.uuid4()))
    name: str
    slug: str
    count: int = 0


class CategoryCreate(BaseModel):
    name: str
    slug: str


class Comment(BaseModel):
    id: str = Field(default_factory=lambda: str(uuid.uuid4()))
    articleId: str
    author: str
    content: str
    createdAt: datetime = Field(default_factory=datetime.utcnow)


class CommentCreate(BaseModel):
    author: str
    content: str


class ContactMessage(BaseModel):
    id: str = Field(default_factory=lambda: str(uuid.uuid4()))
    name: str
    email: str
    message: str
    read: bool = False
    createdAt: datetime = Field(default_factory=datetime.utcnow)


class ContactMessageCreate(BaseModel):
    name: str
    email: str
    message: str
