from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from src.crud.usuarios_times import crud
from src.models.usuarios_times import UsuarioTime


class UsuarioTimeService:

    async def vincular_usuario_time(
        self,
        db: AsyncSession,
        usuario_id: int,
        time_id: int,
        funcao: Optional[str] = None
    ) -> UsuarioTime:
        """Vincula um usuário a um time"""
        return await crud.vincular_usuario_time(
            db, usuario_id, time_id, funcao
        )

    async def desvincular_usuario_time(
        self,
        db: AsyncSession,
        usuario_id: int,
        time_id: int
    ) -> bool:
        """Remove vínculo entre usuário e time"""
        return await crud.desvincular_usuario_time(db, usuario_id, time_id)

    async def atualizar_funcao(
        self,
        db: AsyncSession,
        usuario_id: int,
        time_id: int,
        funcao: str
    ) -> Optional[UsuarioTime]:
        """Atualiza a função do usuário no time"""
        return await crud.atualizar_funcao(db, usuario_id, time_id, funcao)

    async def listar_usuarios_do_time(
        self,
        db: AsyncSession,
        time_id: int
    ) -> List[UsuarioTime]:
        """Lista todos os usuários de um time"""
        return await crud.listar_usuarios_do_time(db, time_id)

    async def listar_times_do_usuario(
        self,
        db: AsyncSession,
        usuario_id: int
    ) -> List[UsuarioTime]:
        """Lista todos os times de um usuário"""
        return await crud.listar_times_do_usuario(db, usuario_id)
