from abc import ABC, abstractmethod
from typing import List, Optional

from ..entities.consultor import Consultor


class ConsultorRepository(ABC):
    @abstractmethod
    async def buscar_por_id(self, id_pessoa: int) -> Optional[Consultor]:
        pass

    @abstractmethod
    async def buscar_todos(
        self, limite: int = 100, offset: int = 0, filtro_ativo: Optional[bool] = None
    ) -> List[Consultor]:
        pass

    @abstractmethod
    async def buscar_ranking(
        self, limite: int = 100, componente: Optional[str] = None
    ) -> List[Consultor]:
        pass

    @abstractmethod
    async def contar_total(self, filtro_ativo: Optional[bool] = None) -> int:
        pass
