from selenium import webdriver
import time
from fake_useragent import UserAgent
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import re
import threading
import random
from PremiumRequestManager import RequestManager


#lock = threading.Lock()
get_alternator = 1
ReqMan = RequestManager(get_alternator=get_alternator)

def generateHTML(url):
    pre = str(
        '<html><script type="text/javascript">g_steamID = "76561198062672769"; VALVE_PUBLIC_PATH = "https:\/\/community.akamai.steamstatic.com\/public\/";</script><script type="text/javascript" src="https://community.akamai.steamstatic.com/public/javascript/scriptaculous/_combined.js?v=OeNIgrpEF8tL&amp;l=english&amp;load=effects,controls,slider,dragdrop" ></script><script type="text/javascript" src="https://community.akamai.steamstatic.com/public/javascript/global.js?v=mqQ0OvgabXsr&amp;l=english" ></script><script type="text/javascript" src="https://community.akamai.steamstatic.com/public/javascript/jquery-1.11.1.min.js?v=.isFTSRckeNhC" ></script><script type="text/javascript" src="https://community.akamai.steamstatic.com/public/shared/javascript/tooltip.js?v=.zYHOpI1L3Rt0" ></script><script type="text/javascript" src="https://community.akamai.steamstatic.com/public/shared/javascript/shared_global.js?v=y7rozL7uuNwI&amp;l=english" ></script><script type="text/javascript">$J = jQuery.noConflict(); if ( typeof JSON != "object" || !JSON.stringify || !JSON.parse ) { document.write( "<scr" + "ipt type="text\/javascript" src="https:\/\/community.akamai.steamstatic.com\/public\/javascript\/json2.js?v=pmScf4470EZP&amp;l=english" ><\/script>\n" ); };<\/script></script><div id="searchResultsRows"><script type="text/javascript">$J = jQuery.noConflict();</script>'
    )

    end = False
    counter = 0
    while not end:
        counter += 1
        if counter > 10:
            return None
        global get_alternator
        get_alternator = (get_alternator + 1) % 4
        r = ReqMan.getRequest(url=url, get_alternator=get_alternator)
        if r is None:
            continue
        r = r.json()
        if r["success"] is False:
            continue
        time.sleep(1)
        end = True

    results_html = r["results_html"]

    listinginfo = "var g_rgListingInfo = " + str(r["listinginfo"]) + ";"
    assets = "var g_rgAssets = " + str(r["assets"]) + ";"
    walletinfo = 'var g_rgWalletInfo = {"wallet_currency":3,"wallet_country":"AT","wallet_state":"","wallet_fee":"1","wallet_fee_minimum":"1","wallet_fee_percent":"0.05","wallet_publisher_fee_percent_default":"0.10","wallet_fee_base":"0","wallet_balance":"472","wallet_delayed_balance":"0","wallet_max_balance":"200000","wallet_trade_max_balance":"180000","success":1,"rwgrsn":-2};'
    g_oSearchResults = "null;"
    marketcheckhash = "MarketCheckHash();"

    full_html = (
        pre
        + "\n"
        + results_html
        + '<script type="text/javascript">'
        + listinginfo
        + "\n"
        + assets
        + "\n"
        + walletinfo
        + "\n"
        + g_oSearchResults
        + "\n"
        + marketcheckhash
        + "</script>"
    )

    #with lock:
    randint = random.randint(0, 133769420)
    f = open("market/listings/730/index" + str(randint) + ".html", "w")
    f.write(str(full_html))
    f.close()
    skins_with_ranks = getRanks(randint)

    #with lock:
    f = open(str(randint) + ".txt", "w")
    f.write(str(skins_with_ranks))
    f.close()


def getRanks(index_int):
    skins_with_ranks = []

    proxy = "127.0.0.1:9981"
    # C:\Users\akroi\AppData\Local\Google\Chrome\User Data\Default\Extensions\jjicbefpemnphinccgikpdaagjebbnhg\3.2.4_0
    csfloat_ext = "3.2.4_0.crx"
    options = webdriver.ChromeOptions()
    options.add_extension(csfloat_ext)
    options.add_argument(f"--proxy-server={proxy}")
    options.add_argument("--headless=new")
    options.add_argument("--ignore-ssl-errors=yes")
    options.add_argument("--ignore-certificate-errors")
    options.add_argument("--blink-settings=imagesEnabled=false")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")

    driver = webdriver.Chrome(options=options)

    driver.get(
        "http://steamcommunity.com/market/listings/730/index" + str(index_int) + ".html"
    )
    time.sleep(5)

    try:
        csfloat_item_row_wrappers = driver.find_elements(
            By.XPATH, "//*[starts-with(@id, 'listing_')]"
        )
    except Exception as e:
        print(str(e))
        driver.quit()
        return None

    if len(csfloat_item_row_wrappers) == 0:
        print("nix")
        driver.quit()
        return None

    try:
        for wrapper in csfloat_item_row_wrappers:
            rank = re.findall("Rank #([0-9]*)", str(wrapper.text))
            html = wrapper.get_attribute("outerHTML")
            soup = BeautifulSoup(html, "html.parser")
            try:
                inspect_link = soup.find("a", {"class": "csfloat-easy-inspect"}).get(
                    "href"
                )
            except Exception as e:
                inspect_link = ""
            if len(rank) > 0:
                rank = str(list(rank)[0])
                skins_with_ranks.append([inspect_link, rank])
    except Exception as e:
        print(str(e))
        driver.quit()
        return None

    # print(skins_with_ranks)
    driver.quit()
    return skins_with_ranks


if __name__ == "__main__":
    url_list = [
        "https://steamcommunity.com/market/listings/730/StatTrak™%20MP9%20%7C%20Starlight%20Protector%20(Battle-Scarred)/render/?query=&start=0&count=100&currency=3",
        "https://steamcommunity.com/market/listings/730/Souvenir%20Sawed-Off%20%7C%20Snake%20Camo%20(Factory%20New)/render/?query=&start=0&count=100&currency=3",
        "https://steamcommunity.com/market/listings/730/AK-47%20%7C%20Neon%20Rider%20%28Battle-Scarred%29/render/?query=&start=0&count=100&currency=3",
        "https://steamcommunity.com/market/listings/730/AK-47%20%7C%20Jungle%20Spray%20%28Minimal%20Wear%29/render/?query=&start=0&count=100&currency=3",
    ]

    for url in url_list:
        print(url)
        t = threading.Thread(target=generateHTML, args=(url,))
        #t.daemon = True
        t.start()

    # generateHTML("https://steamcommunity.com/market/listings/730/AK-47%20%7C%20Black%20Laminate%20%28Battle-Scarred%29/render/?query=&start=0&count=100&currency=3")
