from fastapi import HTTPException, Response

from utils.http_status import (
    HTTP_200_OK,
    HTTP_204_NO_CONTENT,
    HTTP_400_BAD_REQUEST,
    HTTP_401_UNAUTHORIZED,
    HTTP_404_NOT_FOUND,
    HTTP_500_INTERNAL_SERVER_ERROR,
    HTTP_503_SERVICE_UNAVAILABLE
)

def handle_response(response: Response, data=None, data_name=None, auth_check=False, connection_check=False, validation_check=None):
    # Manejo de datos vacíos o no encontrados
    if data_name and (not data):
        response.status_code = HTTP_404_NOT_FOUND
        return {"message": f"{data_name} is empty or not found."}

    # Manejo de errores de autenticación
    if auth_check:
        response.status_code = HTTP_401_UNAUTHORIZED
        return {"message": "Invalid access key or secret key."}

    # Manejo de errores de conexión
    if connection_check:
        response.status_code = HTTP_503_SERVICE_UNAVAILABLE
        return {"message": f"Unable to connect to {data_name} service."}

    # Manejo de errores de validación
    if validation_check:
        response.status_code = HTTP_400_BAD_REQUEST
        return {"message": f"Validation error: {validation_check}"}

    # Manejo de datos válidos pero vacíos
    if data is None or (isinstance(data, list) and len(data) == 0):
        response.status_code = HTTP_204_NO_CONTENT
        return {"message": "No content available."}

    # Si no hay errores, devolver el estado exitoso
    response.status_code = HTTP_200_OK
    return {"data": data}