import sys

from gql import Client, gql
from gql.transport.requests import RequestsHTTPTransport

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

from common import get_env_variable_required, print_message


class GraphqlClient:
    """Creates a client to make calls to graphql endpoint"""

    def __init__(self) -> None:
        cqat_url = get_env_variable_required("CQAT_URL")

        sample_transport = RequestsHTTPTransport(
            url=f"{cqat_url}/graphql",
            use_json=True,
            headers={
                "Content-type": "application/json",
            },
            retries=3,
        )

        try:
            self.client = Client(
                transport=sample_transport,
                fetch_schema_from_transport=True,
            )
        except Exception:
            self.client = None
            print_message(
                "Não foi possível se comunicar com o CQAT "
                "(o serviço de automações do time DevSecOps). "
                "Por favor entre em contato."
            )

    def call(self, graphql_schema, params):
        """Execute a request"""

        if self.client is None:
            return None

        return self.client.execute(gql(graphql_schema), variable_values=params)


class GraphqlDefaultOutput:
    def __init__(self, result: dict) -> None:
        self.success = result["success"]
        self.result = result["result"]
