# Um cliente para a API
# Explicação: https://xflowpayments.com/blog/api-pix-python/

# xflow.py
import os
import requests

BASE = "https://app.xflowpayments.com/api/v1"
AUTH = (os.environ["XFLOW_PUBLIC_KEY"], os.environ["XFLOW_SECRET_KEY"])


class XflowErro(Exception):
    def __init__(self, status, corpo, retry_after=None):
        self.status = status
        self.code = corpo.get("error")
        self.request_id = corpo.get("request_id")
        self.retry_after = retry_after
        super().__init__(f"{status} {self.code}: {corpo.get('message')} ({self.request_id})")


def xflow(method, path, json=None, idempotency_key=None):
    headers = {"Idempotency-Key": idempotency_key} if idempotency_key else {}
    resp = requests.request(method, BASE + path, auth=AUTH, json=json, headers=headers, timeout=30)
    corpo = resp.json() if resp.content else {}
    if resp.status_code >= 400:
        raise XflowErro(resp.status_code, corpo, resp.headers.get("retry-after"))
    return corpo
