import requests


class Service:
    def __init__(self, cfg, session=None):
        self.session = session or requests.Session()
        self.client = Client(cfg.get("client") or {})
        self.disabled = cfg.get("disabled")
        self.extras = cfg.get("extras")


class Client:
    def __init__(self, data):
        self.baseUrl = data.get("baseUrl")
        self.endpoints = {k: Endpoint(v) for k, v in (data.get("endpoints") or {}).items()}
        self.extras = data.get("extras") or {}


class Endpoint:
    def __init__(self, data):
        self.headers = data.get("headers") or {}
        self.href = data["href"]
        self.method = data.get("method") or "GET"
        self.templated = data.get("templated") or False
        self.timeout = data.get("timeout") or 15
        self.ttl = data.get("ttl") or 0

    # noinspection PyPep8Naming
    def get_headers(self, accessToken=None, apiKey=None):
        token = None
        if accessToken:
            token = {"accessToken": accessToken}
        elif apiKey:
            token = {"apiKey": apiKey}
        if token:
            self.headers.update({"Authorization": self.headers["Authorization"].format(**token)})
        return self.headers