from abc import ABC, abstractmethod

from fastapi_modules.fastapi_leaudit.domian.Dto.evaluationPointGroupDto import (
    EvaluationPointGroupBatchDeleteDTO,
    EvaluationPointGroupBatchStatusDTO,
    EvaluationPointGroupBindingCreateDTO,
    EvaluationPointGroupBindingUpdateDTO,
    EvaluationPointGroupCreateDTO,
    EvaluationPointGroupRuleDraftCreateDTO,
    EvaluationPointGroupRebindDTO,
    EvaluationPointGroupUpdateDTO,
)
from fastapi_modules.fastapi_leaudit.domian.vo.evaluationPointGroupVo import (
    EvaluationPointGroupBatchDeleteVO,
    EvaluationPointGroupBatchStatusVO,
    EvaluationPointGroupDeleteVO,
    EvaluationPointGroupListVO,
    EvaluationPointGroupRuleDraftVO,
    EvaluationPointGroupRuleTemplateVO,
    EvaluationPointGroupRebindVO,
    EvaluationPointGroupVO,
    RuleGroupBindingVO,
)


class IEvaluationPointGroupService(ABC):
    """评查点分组服务接口。"""

    @abstractmethod
    async def ListGroups(
        self,
        Name: str | None,
        Code: str | None,
        IsEnabled: bool | None,
        Pid: int | None,
        Page: int,
        PageSize: int,
    ) -> EvaluationPointGroupListVO:
        ...

    @abstractmethod
    async def ListAllGroups(self, IncludeDisabled: bool, WithRuleCount: bool) -> list[EvaluationPointGroupVO]:
        ...

    @abstractmethod
    async def ListGroupsByDocumentTypes(
        self,
        DocumentTypeIds: list[int],
        IncludeDisabled: bool,
        WithRuleCount: bool,
    ) -> list[EvaluationPointGroupVO]:
        ...

    @abstractmethod
    async def GetGroup(self, GroupId: int, WithRuleCount: bool) -> EvaluationPointGroupVO:
        ...

    @abstractmethod
    async def GetChildren(self, GroupId: int, IsEnabled: bool | None, Page: int, PageSize: int) -> EvaluationPointGroupListVO:
        ...

    @abstractmethod
    async def CreateGroup(self, Body: EvaluationPointGroupCreateDTO) -> EvaluationPointGroupVO:
        ...

    @abstractmethod
    async def UpdateGroup(self, GroupId: int, Body: EvaluationPointGroupUpdateDTO) -> EvaluationPointGroupVO:
        ...

    @abstractmethod
    async def DeleteGroup(self, GroupId: int) -> EvaluationPointGroupDeleteVO:
        ...

    @abstractmethod
    async def RebindGroup(self, GroupId: int, Body: EvaluationPointGroupRebindDTO) -> EvaluationPointGroupRebindVO:
        ...

    @abstractmethod
    async def BatchUpdateStatus(self, Body: EvaluationPointGroupBatchStatusDTO) -> EvaluationPointGroupBatchStatusVO:
        ...

    @abstractmethod
    async def BatchDelete(self, Body: EvaluationPointGroupBatchDeleteDTO) -> EvaluationPointGroupBatchDeleteVO:
        ...

    @abstractmethod
    async def CreateBinding(self, GroupId: int, Body: EvaluationPointGroupBindingCreateDTO) -> RuleGroupBindingVO:
        ...

    @abstractmethod
    async def UpdateBinding(self, BindingId: int, Body: EvaluationPointGroupBindingUpdateDTO) -> RuleGroupBindingVO:
        ...

    @abstractmethod
    async def DeleteBinding(self, BindingId: int) -> None:
        ...

    @abstractmethod
    async def GetRuleTemplate(self, GroupId: int) -> EvaluationPointGroupRuleTemplateVO:
        ...

    @abstractmethod
    async def CreateRuleDraft(self, GroupId: int, Body: EvaluationPointGroupRuleDraftCreateDTO) -> EvaluationPointGroupRuleDraftVO:
        ...
