from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession

from src.crud.times import TimeCRUD
from src.schemas.times import TimeCreate, TimeUpdate, Time as TimeSchema


class TimeService:
    def __init__(self):
        self.crud = TimeCRUD()

    async def get_time(
        self,
            db: AsyncSession,
            time_id: int) -> Optional[TimeSchema]:
        time = await self.crud.get_by_id(db, time_id)
        return time

    async def get_times_by_empresa(
        self,
            db: AsyncSession,
            empresa_id: str) -> List[TimeSchema]:
        times = await self.crud.get_by_empresa(db, empresa_id)
        return times

    async def list_times(
        self,
        db: AsyncSession,
        *,
        empresa_id: Optional[str] = None,
        nome: Optional[str] = None,
    ) -> List[TimeSchema]:
        times = await self.crud.list(db, empresa_id=empresa_id, nome=nome)
        return times

    async def create_time(
        self,
            db: AsyncSession,
            payload: TimeCreate) -> TimeSchema:
        time = await self.crud.create(db, payload)
        return time

    async def update_time(
        self,
            db: AsyncSession,
            time_id: int,
            payload: TimeUpdate) -> Optional[TimeSchema]:
        time = await self.crud.update(db, time_id, payload)
        return time

    async def delete_time(self, db: AsyncSession, time_id: int) -> bool:
        return await self.crud.delete(db, time_id)
