from datetime import datetime
from sqlmodel import SQLModel, Field

class ProductTemplate(SQLModel, table=True):
    """
    Database model that represents an uploaded PSD product template.
    """
    __tablename__ = "product_template"

    id: int | None = Field(default=None, primary_key=True)

    name: str = Field(index=True, nullable=False)
    unique_name: str = Field(index=True, nullable=False, unique=True)

    uploaded_by: int | None = Field(default=None, foreign_key="user.id")

    # On-disk paths
    file_path: str = Field(nullable=False)
    base_image_path: str | None = Field(default=None, nullable=True)
    base_thumbnail_path: str | None = Field(default=None, nullable=True)
    main_black_mask_path: str | None = Field(default=None, nullable=True)
    main_white_mask_path: str | None = Field(default=None, nullable=True)
    logo_black_mask_path: str | None = Field(default=None, nullable=True)
    logo_white_mask_path: str | None = Field(default=None, nullable=True)
    color_preview_path: str | None = Field(default=None, nullable=True)
    color_white_mask_path: str | None = Field(default=None, nullable=True)

    width: int = Field(nullable=False)
    height: int = Field(nullable=False)

    # PSD ratio as a string "width:height"
    ratio: str = Field(default="0:0", nullable=False)

    # Soft-delete
    is_deleted: bool = Field(default=False)

    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow, sa_column_kwargs={"onupdate": datetime.utcnow})
