import uuid
from datetime import datetime
from enum import Enum

from pydantic import BaseModel


class ImageModel(str, Enum):
    """OpenAI image-generation model selectable per request.

    Used by the ghost-mannequin and VTON endpoints. When a request omits the
    field, the server falls back to ``settings.OPENAI_IMAGE_MODEL``. Ignored by
    the Gemini provider, which uses its own image model.
    """

    gpt_image_2 = "gpt-image-2"
    gpt_image_1_5 = "gpt-image-1.5"


class PageParams(BaseModel):
    page: int = 1
    size: int = 20


class PageMeta(BaseModel):
    page: int
    size: int
    total: int


class TimestampMixin(BaseModel):
    created_at: datetime
    updated_at: datetime


class GarmentBrief(BaseModel):
    """Garment summary used in list responses."""

    id: uuid.UUID
    user_id: uuid.UUID
    user_name: str | None = None
    category_main: str
    category_sub: str | None = None
    description: str | None = None
    tags: dict | None = None
    source_image_path: str | None = None
    source_image_url: str | None = None
    ghost_image_path: str | None = None
    ghost_image_url: str | None = None
    created_at: datetime
