from typing import Tuple
import requests

HEADERS_LUT = {
    "X-Client-Id": "58bd3c95768941ea9eb4350aaa033eb3",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "App-Platform": "iOS",
    "Accept": "*/*",
    "User-Agent": "Spotify/8.5.68 iOS/13.4 (iPhone9,3)",
    "Accept-Language": "en",
    "Spotify-App-Version": "8.5.68",
}
MEDIA_REF_LUT_URL = "https://spclient.wg.spotify.com:443/scannable-id/id"

def get_uri(media_ref: int, token: str):
    """Query Spotify internal API to get the URI of the media reference."""
    header = {
        **HEADERS_LUT,
        "Authorization": f"Bearer {token}"
    }
    url = f'{MEDIA_REF_LUT_URL}/{media_ref}?format=json'
    response = requests.get(url, headers=header)
    response.raise_for_status()
    return response.json()

def get_info(uri: str, token: str) -> Tuple[dict, dict]:
    """Query the Spotify API to get information about a URI."""
    info_headers = {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "Authorization": f"Bearer {token}"
    }
    split = uri.split(":")
    content_type = split[-2] + "s"
    id = split[-1]
    response = requests.get(f"https://api.spotify.com/v1/{content_type}/{id}", headers=info_headers)
    response.raise_for_status()
    resp = response.json()
    result = {
        "name": resp["name"],
        "type": split[-2],
        "url": resp["external_urls"]["spotify"],
    }
    if "artists" in resp:
        result['artists'] = []
        for a in resp['artists']:
            result["artists"].append(a["name"])
    if "album" in resp:
        result['album'] = resp['album']['name']

    if "description" in resp:
        result["description"] = resp['description']
    
    return result, resp

