from typing import List
from sqlmodel import Session, select

from app.models.product_image import ProductImage
from app.models.product_template import ProductTemplate

class ProductImageRepository:

    @staticmethod
    def create(session: Session, entry: ProductImage) -> ProductImage:
        session.add(entry)
        session.commit()
        session.refresh(entry)
        return entry

    @staticmethod
    def list_by_project(session: Session, project_id: int) -> List[ProductImage]:
        stmt = select(ProductImage).where(ProductImage.project_master_id == project_id, ProductImage.is_deleted == False)
        return session.exec(stmt).all()

    @staticmethod
    def list_with_template(session: Session, project_id: int):
        stmt = (
            select(ProductImage, ProductTemplate)
            .join(ProductTemplate, ProductTemplate.id == ProductImage.product_template_id)
            .where(
                ProductImage.project_master_id == project_id,
                ProductImage.is_deleted == False
            )
        )
        return session.exec(stmt).all()

    @staticmethod
    def delete_by_project(session: Session, project_id: int) -> None:
        rows = session.exec(select(ProductImage).where(ProductImage.project_master_id == project_id)).all()
        for r in rows:
            r.is_deleted = True
            session.add(r)
        session.commit()
        return True
