import requests

BASE_URL = "https://5sim.net/v1"
API_TOKEN = "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE4MTAwNzI3NTMsImlhdCI6MTc3ODUzNjc1MywicmF5IjoiMDE4YzU4NjA0ODBiM2I3NjRhNWZmOTQ3YmVmZmU3OTkiLCJzdWIiOjQwNjMyOTV9.HYZSU_yboK9DwHRy6uMFzAyhc_eEpkjkxs5mBYF-K2zaY28BURQpvtAFEfIW0KEoqwLq2WfyjHfcG9E9ftLTzeypfHwF1s-Djwn_E_kzp23R-WzSY9IJkRtRJuF9qggYapXrC_HTnEjgNZnzRXwUN5HDvlA9etSGEut1HE_r4nrhN5fKLuV0FOKwTNI4F6mg9_dUGUneUlxTpfzxZj4iyjYGHTRT5xz09kHx8VgwWXmIgGIitc1oq4MVPs962LuKBSufH5iH4n9DgLdwIcrRSaBSFXcDCPjVdTDjPCCoEkxbXmtTmNwsQd4sPt-ObfIZbIGZx09UlwxOoJPkGmdOig"


def _headers():
    return {
        "Authorization": f"Bearer {API_TOKEN}",
        "Accept": "application/json",
    }


def get_profile():
    r = requests.get(f"{BASE_URL}/user/profile", headers=_headers(), timeout=15)
    r.raise_for_status()
    return r.json()


def get_countries():
    r = requests.get(f"{BASE_URL}/guest/countries", headers={"Accept": "application/json"}, timeout=15)
    r.raise_for_status()
    return r.json()


def get_products(country="", operator="", product=""):
    """Get available products/prices."""
    params = {}
    if country:
        params["country"] = country
    if product:
        params["product"] = product
    r = requests.get(f"{BASE_URL}/guest/prices", params=params, headers={"Accept": "application/json"}, timeout=15)
    r.raise_for_status()
    return r.json()


def buy_activation_number(country, operator, product):
    r = requests.get(
        f"{BASE_URL}/user/buy/activation/{country}/{operator}/{product}",
        headers=_headers(),
        timeout=15
    )
    r.raise_for_status()
    return r.json()


def check_order(order_id):
    r = requests.get(f"{BASE_URL}/user/check/{order_id}", headers=_headers(), timeout=15)
    r.raise_for_status()
    return r.json()


def finish_order(order_id):
    r = requests.get(f"{BASE_URL}/user/finish/{order_id}", headers=_headers(), timeout=15)
    r.raise_for_status()
    return r.json()


def cancel_order(order_id):
    r = requests.get(f"{BASE_URL}/user/cancel/{order_id}", headers=_headers(), timeout=15)
    r.raise_for_status()
    return r.json()


def ban_order(order_id):
    r = requests.get(f"{BASE_URL}/user/ban/{order_id}", headers=_headers(), timeout=15)
    r.raise_for_status()
    return r.json()


def get_orders(category="activation", limit=50, offset=0):
    r = requests.get(
        f"{BASE_URL}/user/orders",
        params={"category": category, "limit": limit, "offset": offset, "order": "id", "reverse": "true"},
        headers=_headers(),
        timeout=15
    )
    r.raise_for_status()
    return r.json()
