import json
import re
import html
import urllib.parse


def parse_buy_market_listing(js_call: str):
    """
    Parses:
    BuyMarketListing('listing', '6424...', 730, '2', '4613...')
    """

    pattern = r"BuyMarketListing\((.*?)\)"
    match = re.search(pattern, js_call)
    if not match:
        return None

    args_str = match.group(1)

    # Split args safely (handles quoted strings)
    args = re.findall(r"'([^']*)'|(\d+)", args_str)

    # Flatten results
    parsed = []
    for a in args:
        parsed.append(a[0] if a[0] != "" else int(a[1]))

    return {
        "type": parsed[0],
        "listing_id": parsed[1],
        "app_id": parsed[2],
        "context_id": parsed[3],
        "asset_id": parsed[4],
    }


def extract_all(raw_text: str):
    raw_text_full_json = json.loads(raw_text)
    if raw_text.strip().startswith("{"):
        data = json.loads(raw_text)
        raw_text = data.get("results_html", "")

    decoded_html = html.unescape(raw_text)

    listinginfo_list = []
    
    # return {
    #     "link": final_inspect_link,
    #     "m": m_param,
    #     "a": a_param,
    #     "d": d_param,
    #     "price": full_price,
    #     "high_low": high_low,
    # }
    
    # --- BuyMarketListing ---
    js_calls = re.findall(r"BuyMarketListing\([^)]*\)", decoded_html)
    for call in js_calls:
        parsed = parse_buy_market_listing(call)
        if parsed:
            #print(parsed["listing_id"])
            listing_info = raw_text_full_json["listinginfo"][str(parsed["listing_id"])]
            
            if "converted_price" in listing_info:
                price = float(listing_info["converted_price"]) / 100
                fee = float(listing_info["converted_fee"]) / 100

            else:
                price = float(listing_info["price"]) / 100
                fee = float(listing_info["fee"]) / 100

            full_price = price + fee
            full_price = round(full_price, 2)
            listinginfo_list.append([str(parsed["listing_id"]), str(listing_info["asset"]["id"]), str(full_price)])
            
            #listinginfo_list.append(parsed)

    # --- Inspect URLs ---
    hrefs = re.findall(r'href="([^"]+)"', decoded_html)
    counter = 0
    for href in hrefs:
        if "steam://run/730" in href:
            listinginfo_list[counter].append(urllib.parse.unquote(href))
            listinginfo_list[counter].append("high")
            #results["inspect_urls"].append(urllib.parse.unquote(href))
            counter += 1

    print(listinginfo_list)
    return listinginfo_list


# Example usage
if __name__ == "__main__":
    with open("testresults.json", "r", encoding="utf-8") as f:
        raw_input = f.read()

    data = extract_all(raw_input)

    with open("parsed_results.txt", "w") as f:
        f.write(data.__str__())
    # for u in data["inspect_urls"]:
    #     print(u)

    # print("\nBuy Listings:")
    # for b in data["buy_listings"]:
    #     print(b)