from abc import ABC, abstractmethod

from fastapi_modules.fastapi_leaudit.domian.Dto.promptTemplateDto import PromptTemplateCreateDTO, PromptTemplateUpdateDTO
from fastapi_modules.fastapi_leaudit.domian.vo.promptTemplateVo import PromptTemplateListVO, PromptTemplateTypeListVO, PromptTemplateVO


class IPromptTemplateService(ABC):
    @abstractmethod
    async def ListTemplates(self, Search: str | None, TemplateTypes: list[str] | None, Status: int | None, Page: int, PageSize: int) -> PromptTemplateListVO:
        ...

    @abstractmethod
    async def GetTemplate(self, TemplateId: int) -> PromptTemplateVO:
        ...

    @abstractmethod
    async def CreateTemplate(self, Body: PromptTemplateCreateDTO) -> PromptTemplateVO:
        ...

    @abstractmethod
    async def UpdateTemplate(self, TemplateId: int, Body: PromptTemplateUpdateDTO) -> PromptTemplateVO:
        ...

    @abstractmethod
    async def DeleteTemplate(self, TemplateId: int) -> None:
        ...

    @abstractmethod
    async def GetTemplateTypes(self) -> PromptTemplateTypeListVO:
        ...

    @abstractmethod
    async def DuplicateTemplate(self, TemplateId: int, NewCode: str | None) -> PromptTemplateVO:
        ...
