from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from src.crud.comandos import crud_comando
from src.models.comandos import ComandoScreenshot
from src.schemas.comandos import (
    ComandoScreenshotCreate,
    ComandoScreenshotUpdate
)


class ComandoScreenshotService:
    """Service para gerenciar comandos de screenshot"""

    async def criar_comando(
        self,
            db: AsyncSession,
            payload: ComandoScreenshotCreate) -> ComandoScreenshot:
        """Cria um novo comando de screenshot"""
        return await crud_comando.create(db, payload)

    async def obter_comando(
        self,
            db: AsyncSession,
            comando_id: int) -> Optional[ComandoScreenshot]:
        """Busca um comando por ID"""
        return await crud_comando.get_by_id(db, comando_id)

    async def obter_comando_pendente(
        self,
            db: AsyncSession,
            computador_id: str) -> Optional[ComandoScreenshot]:
        """Busca o comando pendente mais antigo para um computador"""
        return await crud_comando.get_pendente_by_computador(db, computador_id)

    async def atualizar_comando(
        self,
        db: AsyncSession,
        comando_id: int,
        payload: ComandoScreenshotUpdate
    ) -> Optional[ComandoScreenshot]:
        """Atualiza o status e dados de um comando"""
        return await crud_comando.update(db, comando_id, payload)

    async def listar_comandos(
        self,
        db: AsyncSession,
        *,
        computador_id: Optional[str] = None,
        status: Optional[str] = None,
    ) -> List[ComandoScreenshot]:
        """Lista comandos com filtros opcionais"""
        return await crud_comando.list(
            db, computador_id=computador_id, status=status
        )
