from rich.console import Console

from worker_automate_hub.utils.logger import logger
from worker_automate_hub.utils.updater import check_for_update

console = Console()


async def handle_api_response(response, last_alive=False):

    status = response.status
    if last_alive:
        match status:
            case 200:
                console.print(
                    "\n[Worker last alive] Informado salvo com sucesso.\n",
                    style="bold green",
                )
            case 500:
                console.print("500 - Erro interno da API!", style="red")
                logger.error("500 - Erro interno da API!")
            case 503:
                console.print(
                    "503 - Serviço indisponível ou worker inativo!", style="red"
                )
                logger.error("503 - Serviço indisponível ou worker inativo!")
            case _:
                logger.error(f"Status não tratado: {status}")
        return None
    else:
        match status:
            case 200:
                data = await response.json()
                return {"data": data, "update": False}
            case 204:
                console.print("204 - Nenhum processo encontrado", style="yellow")
                logger.info("204 - Nenhum processo encontrado")
            case 300:
                console.print("300 - Necessário atualização!", style="blue")
                logger.info("300 - Necessário atualização!")
                check_for_update()
            case 401:
                console.print("401 - Acesso não autorizado!", style="red")
                logger.error("401 - Acesso não autorizado!")
            case 404:
                console.print("404 - Nenhum processo disponível!", style="yellow")
                logger.error("404 - Nenhum processo disponível!")
            case 500:
                console.print("500 - Erro interno da API!", style="red")
                logger.error("500 - Erro interno da API!")
            case 503:
                console.print(
                    "503 - Serviço indisponível ou worker inativo!", style="red"
                )
                logger.error("503 - Serviço indisponível ou worker inativo!")
            case _:
                logger.error(f"Status não tratado: {status}")
        return None
