from abc import ABC, abstractmethod

from fastapi_modules.fastapi_leaudit.domian.Dto.evaluationPointDto import (
    EvaluationPointCreateDTO,
    EvaluationPointUpdateDTO,
)
from fastapi_modules.fastapi_leaudit.domian.vo.evaluationPointVo import (
    AttributeTypeListVO,
    EvaluationPointDeleteVO,
    EvaluationPointListVO,
    EvaluationPointVO,
)


class IEvaluationPointService(ABC):
    """评查点服务接口。"""

    @abstractmethod
    async def ListPoints(
        self,
        CurrentUserId: int,
        UserArea: str | None,
        UserRole: str | None,
        CurrentTenantCode: str | None,
        CurrentTenantName: str | None,
        Name: str | None,
        Code: str | None,
        Risk: str | None,
        IsEnabled: bool | None,
        GroupPid: int | None,
        GroupId: int | None,
        DocumentAttributeType: str | None,
        FilterArea: str | None,
        FilterTenantCode: str | None,
        FilterTenantName: str | None,
        Page: int,
        PageSize: int,
    ) -> EvaluationPointListVO:
        ...

    @abstractmethod
    async def GetPoint(
        self,
        CurrentUserId: int,
        UserArea: str | None,
        UserRole: str | None,
        TenantCode: str | None,
        TenantName: str | None,
        PointId: int,
    ) -> EvaluationPointVO:
        ...

    @abstractmethod
    async def CreatePoint(
        self,
        CurrentUserId: int,
        UserArea: str | None,
        UserRole: str | None,
        TenantCode: str | None,
        TenantName: str | None,
        Body: EvaluationPointCreateDTO,
    ) -> EvaluationPointVO:
        ...

    @abstractmethod
    async def UpdatePoint(
        self,
        CurrentUserId: int,
        UserArea: str | None,
        UserRole: str | None,
        TenantCode: str | None,
        TenantName: str | None,
        PointId: int,
        Body: EvaluationPointUpdateDTO,
    ) -> EvaluationPointVO:
        ...

    @abstractmethod
    async def DeletePoint(
        self,
        CurrentUserId: int,
        UserArea: str | None,
        UserRole: str | None,
        TenantCode: str | None,
        TenantName: str | None,
        PointId: int,
    ) -> EvaluationPointDeleteVO:
        ...

    @abstractmethod
    async def GetAttributeTypes(self) -> AttributeTypeListVO:
        ...
