import sys

sys.path.append("./senior-ci")

import json

import requests

from common import exit_message, get_env_variable_required


class DockerHubHelper(object):
    """Creates a helper to call Docker Hub"""

    def __init__(self):
        self.session = requests.Session()
        self.dockerhub_api_url = "https://hub.docker.com/v2/"
        self._login()

    def _get(self, url: str):
        return self.session.get(
            f"{self.dockerhub_api_url}{url}",
            timeout=30.0,
        )

    def _post(self, url: str, data: dict):
        return self.session.post(
            f"{self.dockerhub_api_url}{url}",
            json=data,
            timeout=30.0,
        )

    def _login(self):
        res = self._post(
            url=f"{self.dockerhub_api_url}users/login/",
            data={
                "username": get_env_variable_required("DOCKERHUB_USERNAME"),
                "password": get_env_variable_required("DOCKERHUB_PASS"),
            },
        )
        if res.ok:
            dockerhub_token = json.loads(res.content)["token"]
            self.session.headers.update({"Authorization": f"JWT {dockerhub_token}"})

    def get_repo_by_image_name(self, image_name):
        url = f"repositories/{image_name}"
        res = self._get(url)
        if res.ok:
            try:
                repo = json.loads(res.content)
                return repo
            except Exception as err:
                exit_message(
                    f"Não foi possível carregar o JSON da imagem {image_name} na resposta do Docker Hub: {err}"
                )
        return res
