from http import HTTPStatus
from flask import make_response, jsonify

from server import __version__ as cellxgene_version
from server.common.data_locator import DataLocator


def _is_accessible(path, config):
    if path is None:
        return True

    try:
        dl = DataLocator(path, region_name=config.data_locator__s3__region_name)
        return dl.exists()
    except RuntimeError:
        return False


def health_check(config):
    """
    simple health check - return HTTP response.
    See https://tools.ietf.org/id/draft-inadarei-api-health-check-01.html
    """
    health = {"status": None, "version": "1", "releaseID": cellxgene_version}

    checks = False
    server_config = config.server_config
    if config.is_multi_dataset():
        dataroots = [datapath_dict["dataroot"] for datapath_dict in server_config.multi_dataset__dataroot.values()]
        checks = all([_is_accessible(dataroot, server_config) for dataroot in dataroots])
    else:
        checks = _is_accessible(server_config.single_dataset__datapath, server_config)

    health["status"] = "pass" if checks else "fail"
    code = HTTPStatus.OK if health["status"] == "pass" else HTTPStatus.BAD_REQUEST
    response = make_response(jsonify(health), code)
    response.headers["Content-Type"] = "application/health+json"
    return response
