"""LargeQuant zero-dependency reference client. Python 3.8+."""
import json, urllib.request

class LargeQuantClient:
    def __init__(self, base_url="https://largequant.com", token=None):
        self.base_url = base_url.rstrip("/")
        self.token = token

    def _request(self, method, path, payload=None):
        data = None if payload is None else json.dumps(payload).encode("utf-8")
        headers = {"Accept":"application/json", "Content-Type":"application/json"}
        if self.token: headers["Authorization"] = "Bearer " + self.token
        req = urllib.request.Request(self.base_url + path, data=data, headers=headers, method=method)
        with urllib.request.urlopen(req) as response:
            return json.loads(response.read().decode("utf-8"))

    def public_models(self):
        return self._request("GET", "/api/public/v1/lqm/models")

    def execute(self, model, input_data, parameters=None, seed=None):
        payload = {"model":model, "input":input_data}
        if parameters is not None: payload["parameters"] = parameters
        if seed is not None: payload["seed"] = seed
        return self._request("POST", "/api/v1/lqm/execute", payload)

    def evidence(self, packet_uuid):
        return self._request("GET", "/api/v1/lqm/evidence/" + packet_uuid)
