import datetime,os,random,re,requests
from bs4 import BeautifulSoup
from collections import Counter
import log,variables

values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"]
numbers = ["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20"]

print("Getting list of deck colours")

deckkey = {}

request = requests.get("https://colors-tcg.eu/cards.php?view=alpha")
alldecks = open("key.html","w")
alldecks.write(request.text)
alldecks.close()

# need to correct some html issues

with open("key.html","r") as file:
    filedata = file.read()
filedata = filedata.replace("</td></td>","</td>")
with open("key.html","w") as file:
    file.write(filedata)

with open("key.html") as decks:
    decksoup = BeautifulSoup(decks, "html.parser")
soupdecks = decksoup.find("table",{"id":"colors"})
souprows = soupdecks.find_all("tr")
for row in souprows:
    soupcells = row.find_all("td")
    deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("Ƨ","c").replace(".","").replace("politetness","politeness")
    decktype = soupcells[3].text.lower()
    if decktype in values:
        deckkey[deckname] = decktype
    elif decktype == "n/a":
        deckkey[deckname] = "limited"

print("Parsing log")

cardlist = []
portfolios = []
crayred = 0
crayorange = 0
crayyellow = 0
craygreen = 0
crayblue = 0
craypurple = 0
craybrown = 0
craygrey = 0
tradeout = []
tradein = []
redeemedsketch = 0
coupons = []
datelist = []
logitems = []
pends = []

for event in log.log:
    logentry = {}
    logentry["date"] = event["date"]
    logentry["name"] = event["event"]
    logentry["url"] = event["url"]
    logit = False
    if event["event"] == "portfolio":
        portfolio = {}
        thedecks = {}
        for spacedeck in event["decks"]:
            deck = spacedeck.replace(" ","")
            thedecks[spacedeck] = deckkey[deck]
        portcolours = list(thedecks.values())
        portcolours = sorted(list(dict.fromkeys(portcolours)))
        if len(portcolours) < 3:
            portfolio["type"] = "monochrome"
        else:
            portfolio["type"] = "palette"
        portfolio["decks"] = thedecks
        portfolio["url"] = event["url"]
        portfolios.append(portfolio)
    else:
        try:
            if event["received"]:
                logit = True
                receivedcards = []
                for card in event["received"]:
                    thecard = {}
                    if card[0:4] != "sig_":
                        thedeck = card[:-2]
                    thecard["name"] = card
                    thecard["received"] = event["date"]
                    thecard["mass"] = []
                    if card[0:4] != "sig_":
                        for theme in variables.masscollect:
                            try:
                                if thedeck in variables.masscollect[theme]["decks"]:
                                    thecard["mass"].append(theme)
                            except KeyError:
                                pass
                            try:
                                if card in variables.masscollect[theme]["singles"]:
                                    thecard["mass"].append(theme)
                            except KeyError:
                                pass                
                    if card[0:4] == "sig_":
                        thecard["colour"] = "sig"
                    else:
                        try:
                            thecard["colour"] = deckkey[thedeck]
                        except:
                            pass
                    try:
                        if thecard["colour"]:
                            pass
                    except:
                        print("Warning: no colour found for " + thedeck)
                    if thecard["colour"] == "sig":
                        if card[4:] == variables.name.lower():
                            thecard["priority"] = 5
                        else:
                            thecard["priority"] = 1
                    else:
                        if thedeck in variables.highpriority:
                            thecard["priority"] = 1
                        elif len(thecard["mass"]) > 0:
                            thecard["priority"] = 2
                        else:
                            thecard["priority"] = 4
                    cardlist.append(thecard)
                    datelist.append(event["date"])
                    receivedcards.append(thecard)
                logentry["received"] = receivedcards
        except KeyError:
            pass
        try:
            if event["lost"]:
                logit = True
                lostcards = []
                for card in event["lost"]:
                    checkno = len(cardlist) - 1
                    deleted = False
                    while checkno >= 0:
                        if cardlist[checkno]["name"] == card:
                            if deleted == False:
                                colour = cardlist[checkno]["colour"]
                                cardlist.remove(cardlist[checkno])
                                deleted = True
                        checkno -= 1
                    if deleted == False:
                        print("Warning: trying to remove " + card + " but none found")
                    lostcard = {}
                    lostcard["name"] = card
                    lostcard["colour"] = colour
                    lostcards.append(lostcard)
                    datelist.remove(datelist[-1])
                logentry["lost"] = lostcards
        except KeyError:
            pass
        crayons = {}
        try:
            crayred += event["crayons"]["red"]
            logit = True
            crayons["red"] = event["crayons"]["red"]
        except:
            pass
        try:
            crayorange += event["crayons"]["orange"]
            logit = True
            crayons["orange"] = event["crayons"]["orange"]
        except:
            pass
        try:
            crayyellow += event["crayons"]["yellow"]
            logit = True
            crayons["yellow"] = event["crayons"]["yellow"]
        except:
            pass
        try:
            craygreen += event["crayons"]["green"]
            logit = True
            crayons["green"] = event["crayons"]["green"]
        except:
            pass
        try:
            crayblue += event["crayons"]["blue"]
            logit = True
            crayons["blue"] = event["crayons"]["blue"]
        except:
            pass
        try:
            craypurple += event["crayons"]["purple"]
            logit = True
            crayons["purple"] = event["crayons"]["purple"]
        except:
            pass
        try:
            craybrown += event["crayons"]["brown"]
            logit = True
            crayons["brown"] = event["crayons"]["brown"]
        except:
            pass
        try:
            craygrey += event["crayons"]["gray"]
            logit = True
            crayons["grey"] = event["crayons"]["gray"]
        except:
            pass
        if len(crayons) > 0:
            logentry["crayons"] = crayons
        if event["event"][0:11] == "trade with ":
            try:
                for card in event["lost"]:
                    tradeout.append(event["event"])
            except:
                pass
            try:
                for card in event["received"]:
                    tradein.append(event["event"])
            except:
                pass
        if len(crayons) > 0:
            logentry["crayons"] = crayons
        try:
            redeemedsketch -= event["sketch"]
        except:
            pass
        try:
            for newcoupon in event["coupons"]:
                found = False
                for oldcoupon in coupons:
                    if found == False:
                        if newcoupon == list(oldcoupon.keys())[0]:
                            found = True
                            oldcoupon[newcoupon] += event["coupons"][newcoupon]
                if found == False:
                    coupons.append({newcoupon:event["coupons"][newcoupon]})
        except:
            pass
        try:
            for card in event["pend"]:
                pends.append(card)
        except:
            pass
        try:
            for card in event["unpend"]:
                pends.remove(card)
        except:
            pass
        if logit == True:
            logitems.append(logentry)

logitems = logitems[::-1]
coupons = coupons[::-1]

print("Getting list of owned decks")

portdecks = []

for portfolio in portfolios:
    oneportdecks = list(portfolio["decks"].keys())
    for deck in oneportdecks:
        portdecks.append(deck.replace(" ",""))

portdecks = sorted(list(dict.fromkeys(portdecks)))

decks = []

for card in cardlist:
    if card["colour"] != "sig":
        deck = card["name"][:-2]
        decks.append(deck)

decks = sorted(list(dict.fromkeys(decks)))

decklist = []

for deck in decks:
    thedeck = {}
    thedeck["name"] = deck
    thedeck["colour"] = deckkey[deck]
    thedeck["mass"] = []
    thedeck["massmaster"] = []
    for theme in variables.masscollect:
        try:
            if deck in variables.masscollect[theme]["decks"]:
                thedeck["mass"].append(theme)
        except KeyError:
            pass
        try:
            if deck in variables.masscollect[theme]["masters"]:
                thedeck["massmaster"].append(theme)
        except KeyError:
            pass
    count = 0
    for number in numbers:
        thedeck[number] = None
        for card in cardlist:
            if card["name"] == deck + number:
                if thedeck[number] == None:
                    thedeck[number] = card["received"]
                    count += 1
    thedeck["count"] = count
    if count == 20:
        dates = []
        for number in numbers:
            dates.append(thedeck[number])
        dates = sorted(dates)
        thedeck["mastered"] = dates[-1]
    else:
        thedeck["mastered"] = False
    if deck in variables.highpriority or count >= variables.highthreshold or deck in portdecks or thedeck["colour"] == "limited":
        thedeck["priority"] = 1
    elif len(thedeck["mass"]) > 0 or count >= variables.mediumthreshold:
        thedeck["priority"] = 2
    elif count >= variables.collectthreshold:
        thedeck["priority"] = 3
    else:
        thedeck["priority"] = 4
    decklist.append(thedeck)

if __name__ == "__main__":
    print("Checking for new card images")

    for card in cardlist:
        if card["colour"] == "sig":
            if not os.path.exists("build/decks/sigs/" + card["name"][4:] + ".gif"):
                print("Downloading " + card["name"])
                r = requests.get("https://colors-tcg.eu/cards/" + card["name"] + ".gif")
                open("build/decks/sigs/" + card["name"][4:] + ".gif","wb").write(r.content)

    for deck in decklist:
        if not os.path.isdir("build/decks/" + deck["name"]):
            os.mkdir("build/decks/" + deck["name"])
            print("Downloading " + deck["name"])
            number = 0
            while number < 21:
                if number < 10:
                    r = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + "0" + str(number) + ".gif")
                    open("build/decks/" + deck["name"] + "/0" + str(number) + ".gif","wb").write(r.content)
                else:
                    r = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + str(number) + ".gif")
                    open("build/decks/" + deck["name"] + "/" + str(number) + ".gif","wb").write(r.content)
                number += 1
            master = requests.get("https://colors-tcg.eu/cards/" + deck["name"] + "master.gif")
            open("build/decks/" + deck["name"] + "/master.gif","wb").write(master.content)

print("Getting list of wanted cards")

wantedlist = []

for deck in decklist:
    if deck["priority"] < 4:
        for number in numbers:
            if deck[number] == None:
                wantedcard = {}
                wantedcard["name"] = deck["name"] + number
                wantedcard["colour"] = deck["colour"]
                wantedcard["priority"] = deck["priority"]
                wantedlist.append(wantedcard)

decknames = []
for deck in decklist:
    decknames.append(deck["name"])

cardnames = []
for card in cardlist:
    cardnames.append(card["name"])

for theme in variables.masscollect:
    try:
        for deck in variables.masscollect[theme]["decks"]:
            if deck not in decknames:
                for number in numbers:
                    wantedcard = {}
                    wantedcard["name"] = deck + number
                    wantedcard["colour"] = deckkey[deck]
                    wantedcard["priority"] = 3
                    wantedlist.append(wantedcard)
    except KeyError:
        pass
    try:
        for card in variables.masscollect[theme]["singles"]:
            if card not in cardnames:
                wantedcard = {}
                wantedcard["name"] = card
                wantedcard["colour"] = deckkey[card[:-2]]
                wantedcard["priority"] = 3
                wantedlist.append(wantedcard)
    except KeyError:
        pass

wantedlist = sorted(wantedlist, key=lambda d: d["name"])

removelist = []
        
for card in wantedlist:
    if card["name"] in pends:
        removelist.append(card)

for card in removelist:
    wantedlist.remove(card)

print("Adjusting card priorities")

for card in cardlist:
    for deck in decklist:
        if card["name"][:-2] == deck["name"]:
            if card["priority"] > deck["priority"]:
                card["priority"] = deck["priority"]

cardlist = sorted(cardlist, key=lambda d: d["name"])

theindex = 0
for card in cardlist:
    card["dupe"] = False
    if card["name"][0:4] != "sig_":
        if theindex > 0:
            if card["name"] == cardlist[theindex-1]["name"]:
                card["priority"] = 4
                card["dupe"] = True
    theindex += 1

theindex = 0
if variables.keepsig == True:
    for card in cardlist:
        if card["name"] == "sig_" + variables.name.lower():
            card["priority"] = 1
            if theindex > 0:
                if cardlist[theindex-1]["name"] == "sig_" + variables.name.lower():
                    card["priority"] = 5
    theindex += 1

# core functions

def headerwrite(thefile,pagename):
    header = open(thefile,"a")
    header.write("<!DOCTYPE html>\n<html lang=\"en\" style=\"--headbg:" + variables.headerbackground + ";\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"")
    if len(variables.subfolder) > 0:
        header.write("/" + variables.subfolder)
    header.write("/style.css\">\n    <link rel=\"stylesheet\" href=\"")
    if len(variables.subfolder) > 0:
        header.write("/" + variables.subfolder)
    header.write("/user.css\">\n    <meta name=\"theme-color\" content=\"" + variables.headerbackground + "\">\n    <title>" + variables.name + "ā€™s card collection :: " + pagename + "</title>\n  </head>\n  <body class=\"" + pagename + "\">\n    <aside>\n      \n    </aside>\n    <nav>\n      <ul>\n        <li>")
    if pagename == "index":
        header.write("home")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/\">home</a>")
    header.write("</li>\n        <li>")
    if pagename == "collecting":
        header.write("collecting")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/collecting\">collecting</a>")
    header.write("</li>\n        <li>")
    if pagename == "mass":
        header.write("mass collecting")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/mass\">mass collecting</a>")
    header.write("</li>\n        <li>")
    if pagename == "mastered":
        header.write("mastered")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/mastered\">mastered</a>")
    header.write("</li>\n")
    if variables.ownedpage:
        header.write("        <li>")
        if pagename == "owned":
            header.write("owned")
        else:
            header.write("<a href=\"")
            if len(variables.subfolder) > 0:
                header.write("/" + variables.subfolder)
            header.write("/owned\">owned</a>")
        header.write("</li>\n")
    header.write("        <li>")
    if pagename == "trade":
        header.write("trading")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/trade\">trading</a>")
    header.write("</li>\n        <li>")
    if pagename == "wanted":
        header.write("wanted")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/wanted\">wanted</a>")
    header.write("</li>\n        <li>")
    if pagename == "search":
        header.write("search")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/search\">search</a>")
    header.write("</li>\n        <li>")
    if pagename == "log":
        header.write("log")
    else:
        header.write("<a href=\"")
        if len(variables.subfolder) > 0:
            header.write("/" + variables.subfolder)
        header.write("/log\">log</a>")
    header.write("</li>\n        <li><a href=\"" + variables.tradepost + "\" target=\"_blank\">trade post @ dw</a></li>\n      <li><a href=\"https://colors-tcg.eu/services.php\" target=\"_blank\">service links</a></li>\n      </ul>\n    </nav>\n    <main>\n")
    header.close()

def footerwrite(thefile):
    footer = open(thefile,"a")
    footer.write("    </main>\n  </body>\n</html>")
    footer.close()

def printcard(card):
    if type(card) == dict:
        if card["colour"] == "sig":
            imgstring = "<img src=\""
            if len(variables.subfolder) > 0:
                imgstring += "/" + variables.subfolder
            imgstring += "/decks/sigs/" + card["name"][4:] + ".gif\" title=\"" + card["name"] + "\" loading=\"lazy\">"
            return imgstring
        else:
            deck = card["name"][:-2]
            cardid = card["name"][-2:]
            imgstring = "<img src=\""
            if len(variables.subfolder) > 0:
                imgstring += "/" + variables.subfolder
            imgstring += "/decks/" + deck + "/" + cardid + ".gif\" title=\"" + card["name"] + "\" loading=\"lazy\">"
            return imgstring
    elif type(card) == str:
        if card[0:4] == "sig_":
            imgstring = "<img src=\""
            if len(variables.subfolder) > 0:
                imgstring += "/" + variables.subfolder
            imgstring += "/decks/sigs/" + card[4:] + ".gif\" title=\"" + card + "\" loading=\"lazy\">"
            return imgstring
        else:
            deck = card[:-2]
            cardid = card[-2:]
            imgstring = "<img src=\""
            if len(variables.subfolder) > 0:
                imgstring += "/" + variables.subfolder
            imgstring += "/decks/" + deck + "/" + cardid + ".gif\" title=\"" + card + "\" loading=\"lazy\">"
            return imgstring

def cardtext(card):
    cardtext = "<span class=\"cardname\">"
    if card["colour"] == "red":
        cardtext += "<span title=\"red\">šŸ”“</span>"
    elif card["colour"] == "orange":
        cardtext += "<span title=\"orange\">šŸŸ </span>"
    elif card["colour"] == "yellow":
        cardtext += "<span title=\"yellow\">šŸŸ”</span>"
    elif card["colour"] == "green":
        cardtext += "<span title=\"green\">šŸŸ¢</span>"
    elif card["colour"] == "blue":
        cardtext += "<span title=\"blue\">šŸ”µ</span>"
    elif card["colour"] == "purple":
        cardtext += "<span title=\"purple\">šŸŸ£</span>"
    elif card["colour"] == "brown":
        cardtext += "<span title=\"brown\">šŸŸ¤</span>"
    elif card["colour"] == "gray":
        cardtext += "<span title=\""
        if variables.british:
            cardtext += "grey"
        else:
            cardtext += "gray"
        cardtext += "\">āšŖ</span>"
    elif card["colour"] == "special":
        cardtext += "<span title=\"special\">āœØ</span>"
    elif card["colour"] == "limited":
        cardtext += "<span title=\"limited\">šŸŒˆ</span>"
    elif card["colour"] == "sig":
        cardtext += "<span title=\"signature\">āœ</span>"
    cardtext += card["name"] + "</span>"
    return cardtext

def portfoliogen(theportfolio,thetype,portnumber):
    if thetype == "palette":
        portstring = "<table class=\"palette portfolio\">\n<tbody>\n<tr>\n<td colspan=\"2\">" + variables.name.lower() + "</td>\n</tr>\n<tr>\n<td class=\"deck1\">"        
        try:
            reddeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("red")]
            for deck in decklist:
                if deck["name"] == reddeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + reddeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n<td class=\"deck5\">"
        try:
            bluedeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("blue")]
            for deck in decklist:
                if deck["name"] == bluedeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + bluedeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck2\">"
        try:
            orangedeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("orange")]
            for deck in decklist:
                if deck["name"] == orangedeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + orangedeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n<td class=\"deck6\">"
        try:
            purpledeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("purple")]
            for deck in decklist:
                if deck["name"] == purpledeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + purpledeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck3\">"
        try:
            yellowdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("yellow")]
            for deck in decklist:
                if deck["name"] == yellowdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + yellowdeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n<td class=\"deck7\">"
        try:
            browndeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("brown")]
            for deck in decklist:
                if deck["name"] == browndeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + browndeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n</tr>\n<tr>\n<td class=\"deck4\">"
        try:
            greendeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("green")]
            for deck in decklist:
                if deck["name"] == greendeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + greendeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n<td class=\"deck8\">"
        try:
            greydeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("gray")]
            for deck in decklist:
                if deck["name"] == greydeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + greydeck
        except:
            specialdeck = list(theportfolio["decks"].keys())[list(theportfolio["decks"].values()).index("special")]
            for deck in decklist:
                if deck["name"] == specialdeck.replace(" ",""):
                    if deck["mastered"]:
                        portstring += "ā– "
                    else:
                        portstring += "ā–”"
                    break
            portstring += " " + specialdeck
        portstring += "</td>\n</tr>\n<tr>\n<td colspan=\"2\"><a href=\"" + theportfolio["url"] + "\">palette portfolio "
        if portnumber < 10:
            portstring += "0" + str(portnumber)
        else:
            portstring += str(portnumber)
        portstring += "</a></td>\n</tr>\n</tbody>\n</table>\n"
    elif thetype == "monochrome":
        thecolour = list(theportfolio["decks"].values())[0]
        portstring = "<table class=\"" + thecolour + " portfolio\">\n<tbody>\n<tr>\n<td colspan=\"2\">" + variables.name.lower() + "</td>\n</tr>\n<tr>\n<td class=\"deck1\">"
        thedecks = sorted(list(theportfolio["decks"].keys()))
        for deck in decklist:
            if deck["name"] == thedecks[0].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[0] + "</td>\n<td class=\"deck5\">"
        for deck in decklist:
            if deck["name"] == thedecks[4].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[4] + "</td>\n</tr>\n<tr>\n<td class=\"deck2\">"
        for deck in decklist:
            if deck["name"] == thedecks[1].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[1] + "</td>\n<td class=\"deck6\">"
        for deck in decklist:
            if deck["name"] == thedecks[5].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[5] + "</td>\n</tr>\n<tr>\n<td class=\"deck3\">"
        for deck in decklist:
            if deck["name"] == thedecks[2].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[2] + "</td>\n<td class=\"deck7\">"
        for deck in decklist:
            if deck["name"] == thedecks[6].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[6] + "</td>\n</tr>\n<tr>\n<td class=\"deck4\">"
        for deck in decklist:
            if deck["name"] == thedecks[3].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[3] + "</td>\n<td class=\"deck8\">"
        for deck in decklist:
            if deck["name"] == thedecks[7].replace(" ",""):
                if deck["mastered"]:
                    portstring += "ā– "
                else:
                    portstring += "ā–”"
                break
        portstring += " " + thedecks[7] + "</td>\n</tr>\n<tr>\n<td colspan=\"2\"><a href=\"" + theportfolio["url"] + "\">monochrome portfolio "
        if portnumber < 10:
            portstring += "0" + str(portnumber)
        else:
            portstring += str(portnumber)
        portstring += "</a></td>\n</tr>\n</tbody>\n</table>\n"
    return portstring

portfoliosearch = len(portfolios)
latestpalette = 0
latestmonochrome = 0
palettes = 0
monochromes = 0
while portfoliosearch > 0:
    if portfolios[portfoliosearch-1]["type"] == "palette":
        palettes += 1
        if latestpalette == 0:
            latestpalette = portfoliosearch
    if portfolios[portfoliosearch-1]["type"] == "monochrome":
        monochromes += 1
        if latestmonochrome == 0:
            latestmonochrome = portfoliosearch
    portfoliosearch -= 1

def filterwrite(page,colour=False,sigs=False):
    filterstring = "<p class=\"typefilter\">"
    if colour:
        filterstring += "Filtered to <span class=\"" + colour + "\"><b>"
        if colour == "gray":
            if variables.british:
                filterstring += "grey"
            else:
                filterstring += "gray"
        else:
            filterstring += colour
        filterstring += "</b></span>. <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "\">Show all</a>"
    else:
        filterstring += "Filter: <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/red\" title=\"red\">šŸ”“</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/orange\" title=\"orange\">šŸŸ </a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/yellow\" title=\"yellow\">šŸŸ”</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/green\" title=\"green\">šŸŸ¢</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/blue\" title=\"blue\">šŸ”µ</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/purple\" title=\"purple\">šŸŸ£</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/brown\" title=\"brown\">šŸŸ¤</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/gray\" title=\""
        if variables.british:
            filterstring += "grey"
        else:
            filterstring += "gray"
        filterstring += "\">āšŖ</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/special\" title=\"special\">āœØ</a> <a href=\""
        if len(variables.subfolder) > 0:
            filterstring += "/" + variables.subfolder
        filterstring += "/" + page + "/limited\" title=\"limited\">šŸŒˆ</a>"
        if sigs:
            filterstring += " <a href=\""
            if len(variables.subfolder) > 0:
                filterstring += "/" + variables.subfolder
            filterstring += "/" + page + "/sig\" title=\"sig\">āœ</a>"
    filterstring += "</p>\n"
    return filterstring

def printdeck(deck,fold=True):
    if fold:
        deckstring = "<details class=\"deckwrap\">\n<summary>" + deck["name"] + " ["
        if deck["mastered"]:
            deckstring += deck["mastered"].strftime("%Y-%m-%d")
        else:
            deckstring += str(deck["count"]) + "/20"
        deckstring += "]</summary>\n"
    else:
        deckstring = ""
    deckstring += "<table class=\"decktable " + deck["colour"] + "\">\n"
    if not fold:
        deckstring += "<thead>\n  <tr>\n    <th colspan=\"5\">" + deck["name"] + " ["
        if deck["mastered"]:
            deckstring += deck["mastered"].strftime("%Y-%m-%d")
        else:
            deckstring += str(deck["count"]) + "/20"
        deckstring += "]</th>\n  </tr>\n</thead>\n"
    deckstring += "<tbody>\n"
    test = 1
    while test < 21:
        if test % 5 == 1:
            deckstring += "  <tr>\n"
        deckstring += "    <td>"
        if test < 10:
            teststring = "0" + str(test)
        else:
            teststring = str(test)
        found = False
        for card in cardlist:
            if card["name"] == deck["name"] + teststring:
                deckstring += printcard(card)
                found = True
                break
        if found == False:
            deckstring += "<img src=\""
            if len(variables.subfolder) > 0:
                deckstring += "/" + variables.subfolder
            deckstring += "/decks/" + deck["name"] + "/00.gif\" loading=\"lazy\">"
            if deck["name"] + teststring in pends:
                deckstring += "<p class=\"pending\">pending</p>"
        deckstring += "</td>\n"
        if test % 5 == 0:
            deckstring += "  </tr>\n"
        test += 1
    if deck["mastered"]:
        deckstring += "  <tr>\n    <td colspan=\"5\" align=\"center\"><img src=\""
        if len(variables.subfolder) > 0:
            deckstring += "/" + variables.subfolder
        deckstring += "/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"]
        try:
            if deck["name"] in variables.firstmasteries:
                deckstring += " (first)\" class=\"first"
        except:
            pass
        deckstring += "\"><td>\n</tr>\n"
    deckstring += "</tbody>\n</table>\n"
    if fold:
        deckstring += "</details>\n"
    return deckstring

def crayonlog(colour,event):
    crayonno = event["crayons"][colour]
    if variables.british:
        if colour == "grey":
            crayonrend = "grey"
        else:
            crayonrend = colour
    else:
        crayonrend = colour
    if crayonno > 0:
        crayonstring = "+" + str(crayonno) + " " + crayonrend
    else:
        crayonstring = str(crayonno) + " " + crayonrend
    return crayonstring

def dupes(mass=True,nonmass=True,characters=True,specials=True):
    dupeslist = []
    previouscard = ""
    for card in cardlist:
        try:
            if card["colour"] != "sig" and card ["colour"] != "limited":
                if card["name"] == previouscard["name"]:
                    dupe = {}
                    dupe["name"] = card["name"]
                    if len(card["mass"]) > 0:
                        if mass:
                            dupe["mass"] = card["mass"]
                            if card["colour"] == "special":
                                if specials:
                                    dupeslist.append(dupe)
                            else:
                                if characters:
                                    dupeslist.append(dupe)
                    else:
                        if nonmass:
                            if card["colour"] == "special":
                                if specials:
                                    dupeslist.append(dupe)
                            else:
                                if characters:
                                    dupeslist.append(dupe)
        except:
            pass
        previouscard = card
    return dupeslist

def activitydupes():
    print(dupes(False,True,True,False))

def riku():
    print("Specials")
    print(dupes(True,False,False,True))
    print("Characters")
    print(dupes(True,False,True,False))

def nextportfolio(monochrome=False):
    useddecks = {}
    already = 0
    if monochrome:
        for portfolio in portfolios:
            if portfolio["type"] == "monochrome":
                already += 1
                useddecks.update(portfolio["decks"])
    else:
        for portfolio in portfolios:
            if portfolio["type"] == "palette":
                already += 1
                useddecks.update(portfolio["decks"])
    potentials = []
    for deck in decklist:
        if deck["mastered"]:
            if deck["colour"] != "special" and deck["colour"] != "limited":
                potential = True
                for key, value in useddecks.items():
                    if deck["name"] == key.replace(" ",""):
                        potential = False
                if potential:
                    potentials.append(deck)
    potentials = sorted(potentials, key=lambda d: d["mastered"])
    if monochrome:
        reddecks = []
        orangedecks = []
        yellowdecks = []
        greendecks = []
        bluedecks = []
        purpledecks = []
        browndecks = []
        greydecks = []
        for deck in potentials:
            if deck["colour"] == "red":
                reddecks.append(deck)
            elif deck["colour"] == "orange":
                orangedecks.append(deck)
            elif deck["colour"] == "yellow":
                yellowdecks.append(deck)
            elif deck["colour"] == "green":
                greendecks.append(deck)
            elif deck["colour"] == "blue":
                bluedecks.append(deck)
            elif deck["colour"] == "purple":
                purpledecks.append(deck)
            elif deck["colour"] == "brown":
                browndecks.append(deck)
            elif deck["colour"] == "gray":
                greydecks.append(deck)
        longestvalue = len(reddecks)
        nextportcolour = "red"
        if len(orangedecks) > longestvalue:
            nextportcolour = "orange"
        if len(yellowdecks) > longestvalue:
            nextportcolour = "yellow"
        if len(greendecks) > longestvalue:
            nextportcolour = "green"
        if len(bluedecks) > longestvalue:
            nextportcolour = "blue"
        if len(purpledecks) > longestvalue:
            nextportcolour = "purple"
        if len(browndecks) > longestvalue:
            nextportcolour = "brown"
        if len(greydecks) > longestvalue:
            nextportcolour = "grey"
        firstthree = []
        if nextportcolour == "red":
            firstthree.append(reddecks[0]["name"])
            firstthree.append(reddecks[1]["name"])
            firstthree.append(reddecks[2]["name"])
        elif nextportcolour == "orange":
            firstthree.append(orangedecks[0]["name"])
            firstthree.append(orangedecks[1]["name"])
            firstthree.append(orangedecks[2]["name"])
        elif nextportcolour == "yellow":
            firstthree.append(yellowdecks[0]["name"])
            firstthree.append(yellowdecks[1]["name"])
            firstthree.append(yellowdecks[2]["name"])
        elif nextportcolour == "green":
            firstthree.append(greendecks[0]["name"])
            firstthree.append(greendecks[1]["name"])
            firstthree.append(greendecks[2]["name"])
        elif nextportcolour == "blue":
            firstthree.append(bluedecks[0]["name"])
            firstthree.append(bluedecks[1]["name"])
            firstthree.append(bluedecks[2]["name"])
        elif nextportcolour == "purple":
            firstthree.append(purpledecks[0]["name"])
            firstthree.append(purpledecks[1]["name"])
            firstthree.append(purpledecks[2]["name"])
        elif nextportcolour == "brown":
            firstthree.append(browndecks[0]["name"])
            firstthree.append(browndecks[1]["name"])
            firstthree.append(browndecks[2]["name"])
        elif nextportcolour == "grey":
            firstthree.append(greydecks[0]["name"])
            firstthree.append(greydecks[1]["name"])
            firstthree.append(greydecks[2]["name"])
        secondfive = []
        nearingdecks = sorted(decklist, key=lambda d: d["count"],reverse=True)
        slots = 5
        for deck in nearingdecks:
            if slots > 0:
                if not deck["mastered"]:
                    if nextportcolour == "grey":
                        if deck["colour"] == "gray":
                            secondfive.append(deck["name"])
                            slots -= 1
                    else:
                        if deck["colour"] == nextportcolour:
                            secondfive.append(deck["name"])
                            slots -= 1
        alleight = sorted(firstthree + secondfive)
    else:
        thereddeck = False
        redmastered = False
        theorangedeck = False
        orangemastered = False
        theyellowdeck = False
        yellowmastered = False
        thegreendeck = False
        greenmastered = False
        thebluedeck = False
        bluemastered = False
        thepurpledeck = False
        purplemastered = False
        thebrowndeck = False
        brownmastered = False
        thegreydeck = False
        greymastered = False
        sorteddecks = 0
        for deck in potentials:
            if sorteddecks < 3:
                if deck["colour"] == "red" and thereddeck == False:
                    thereddeck = deck["name"]
                    redmastered = True
                    sorteddecks += 1
                elif deck["colour"] == "orange" and theorangedeck == False:
                    theorangedeck = deck["name"]
                    orangemastered = True
                    sorteddecks += 1
                elif deck["colour"] == "yellow" and theyellowdeck == False:
                    theyellowdeck = deck["name"]
                    yellowmastered = True
                    sorteddecks += 1
                elif deck["colour"] == "green" and thegreendeck == False:
                    thegreendeck = deck["name"]
                    greenmastered = True
                    sorteddecks += 1
                elif deck["colour"] == "blue" and thebluedeck == False:
                    thebluedeck = deck["name"]
                    bluemastered = True
                    sorteddecks += 1
                elif deck["colour"] == "purple" and thepurpledeck == False:
                    thepurpledeck = deck["name"]
                    purplemastered = True
                    sorteddecks += 1
                elif deck["colour"] == "brown" and thebrowndeck == False:
                    thebrowndeck = deck["name"]
                    brownmastered = True
                    sorteddecks += 1
                elif deck["colour"] == "gray" and thegreydeck == False:
                    thegreydeck = deck["name"]
                    greymastered = True
                    sorteddecks += 1
        nearingdecks = sorted(decklist, key=lambda d: d["count"],reverse=True)
        if thereddeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thereddeck == False:
                        if deck["colour"] == "red":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thereddeck = deck["name"]
        if theorangedeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if theorangedeck == False:
                        if deck["colour"] == "orange":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                theorangedeck = deck["name"]
        if theyellowdeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if theyellowdeck == False:
                        if deck["colour"] == "yellow":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                theyellowdeck = deck["name"]
        if thegreendeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thegreendeck == False:
                        if deck["colour"] == "green":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thegreendeck = deck["name"]
        if thebluedeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thebluedeck == False:
                        if deck["colour"] == "blue":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thebluedeck = deck["name"]
        if thepurpledeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thepurpledeck == False:
                        if deck["colour"] == "purple":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thepurpledeck = deck["name"]
        if thebrowndeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thebrowndeck == False:
                        if deck["colour"] == "brown":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thebrowndeck = deck["name"]
        if thegreydeck == False:
            for deck in nearingdecks:
                if not deck["mastered"]:
                    if thegreydeck == False:
                        if deck["colour"] == "gray":
                            used = False
                            for key, value in useddecks.items():
                                if deck["name"] == key.replace(" ",""):
                                    used = True
                            if used == False:
                                thegreydeck = deck["name"]
        alleight = []
        alleight.append(thereddeck)
        alleight.append(theorangedeck)
        alleight.append(theyellowdeck)
        alleight.append(thegreendeck)
        alleight.append(thebluedeck)
        alleight.append(thepurpledeck)
        alleight.append(thebrowndeck)
        alleight.append(thegreydeck)
    portcomment = "ā™„ <b>Your Name:</b> " + variables.name + "\nā™„ <b>Card post:</b> " + variables.url + "\nā™„ <b>"
    if monochrome:
        portcomment += "Monochrome"
    else:
        portcomment += "Palette"
    portcomment += " Portfolio #:</b> " + str(already + 1) + "\n"
    if monochrome:
        portcomment += "ā™„ <b>Monochrome Color:</b> "
        if nextportcolour == "grey":
            if variables.british:
                portcomment += "grey"
            else:
                portcomment += "gray"
        else:
            portcomment += nextportcolour
        portcomment += "\nā™„ <b>1st deck:</b> " + alleight[0]
        if alleight[0] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>2nd deck:</b> " + alleight[1]
        if alleight[1] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>3rd deck:</b> " + alleight[2]
        if alleight[2] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>4th deck:</b> " + alleight[3]
        if alleight[3] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>5th deck:</b> " + alleight[4]
        if alleight[4] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>6th deck:</b> " + alleight[5]
        if alleight[5] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>7th deck:</b> " + alleight[6]
        if alleight[6] in firstthree:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>8th deck:</b> " + alleight[7]
        if alleight[7] in firstthree:
            portcomment += " (mastered)"
    else:
        portcomment += "ā™„ <b>Red deck:</b> " + thereddeck
        if redmastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Orange deck:</b> " + theorangedeck
        if orangemastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Yellow deck:</b> " + theyellowdeck
        if yellowmastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Green deck:</b> " + thegreendeck
        if greenmastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Blue deck:</b> " + thebluedeck
        if bluemastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Purple deck:</b> " + thepurpledeck
        if purplemastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Brown deck:</b> " + thebrowndeck
        if brownmastered:
            portcomment += " (mastered)"
        portcomment += "\nā™„ <b>Gray deck:</b> " + thegreydeck
        if greymastered:
            portcomment += " (mastered)"
    print(portcomment)
    porturl = input("\nPaste the comment URL here: ")
    print("\n{\"event\":\"portfolio\",\"date\":datetime.datetime(" + datetime.datetime.today().strftime("%Y,%-m,%-d") + "),\"url\":\"" + porturl + "\",\"decks\":[\"" + alleight[0] + "\",\"" + alleight[1] + "\",\"" + alleight[2] + "\",\"" + alleight[3] + "\",\"" + alleight[4] + "\",\"" + alleight[5] + "\",\"" + alleight[6] + "\",\"" + alleight[7] + "\"]}")

def switchit():
    wantedbypriority = sorted(wantedlist, key=lambda d: d["priority"])
    redtrade = []
    orangetrade = []
    yellowtrade = []
    greentrade = []
    bluetrade = []
    purpletrade = []
    browntrade = []
    greytrade = []
    for card in cardlist:
        if card["priority"] == 4:
            if card["colour"] == "red":
                redtrade.append(card["name"])
            elif card["colour"] == "orange":
                orangetrade.append(card["name"])
            elif card["colour"] == "yellow":
                yellowtrade.append(card["name"])
            elif card["colour"] == "green":
                greentrade.append(card["name"])
            elif card["colour"] == "blue":
                bluetrade.append(card["name"])
            elif card["colour"] == "purple":
                purpletrade.append(card["name"])
            elif card["colour"] == "brown":
                browntrade.append(card["name"])
            elif card["colour"] == "gray":
                greytrade.append(card["name"])
    wantednames = []
    for card in wantedbypriority:
        wantednames.append(card["name"])
    wantall = []
    tradeall = []
    reds = input("Paste red pile here: ").split(", ")
    wantreds = []
    for card in reds:
        if card in wantednames:
            wantreds.append(card)
    if len(wantreds) > 5:
        wantreds = wantreds[:5]
    if len(wantreds) > 0:
        wantall.extend(wantreds)
        traderedscount = len(wantreds)
        tradereds = []
        tradereds.extend(random.sample(redtrade,len(wantreds)))
        tradeall.extend(tradereds)
    oranges = input("Paste orange pile here: ").split(", ")
    wantoranges = []
    for card in oranges:
        if card in wantednames:
            wantoranges.append(card)
    if len(wantoranges) > 5:
        wantoranges = wantoranges[:5]
    if len(wantoranges) > 0:
        wantall.extend(wantoranges)
        tradeorangescount = len(wantoranges)
        tradeoranges = []
        tradeoranges.extend(random.sample(orangetrade,len(wantoranges)))
        tradeall.extend(tradeoranges)
    yellows = input("Paste yellow pile here: ").split(", ")
    wantyellows = []
    for card in yellows:
        if card in wantednames:
            wantyellows.append(card)
    if len(wantyellows) > 5:
        wantyellows = wantyellows[:5]
    if len(wantyellows) > 0:
        wantall.extend(wantyellows)
        tradeyellowscount = len(wantyellows)
        tradeyellows = []
        tradeyellows.extend(random.sample(yellowtrade,len(wantyellows)))
        tradeall.extend(tradeyellows)
    greens = input("Paste green pile here: ").split(", ")
    wantgreens = []
    for card in greens:
        if card in wantednames:
            wantgreens.append(card)
    if len(wantgreens) > 5:
        wantgreens = wantgreens[:5]
    if len(wantgreens) > 0:
        wantall.extend(wantgreens)
        tradegreenscount = len(wantgreens)
        tradegreens = []
        tradegreens.extend(random.sample(greentrade,len(wantgreens)))
        tradeall.extend(tradegreens)
    blues = input("Paste blue pile here: ").split(", ")
    wantblues = []
    for card in blues:
        if card in wantednames:
            wantblues.append(card)
    if len(wantblues) > 5:
        wantblues = wantblues[:5]
    if len(wantblues) > 0:
        wantall.extend(wantblues)
        tradebluescount = len(wantblues)
        tradeblues = []
        tradeblues.extend(random.sample(bluetrade,len(wantblues)))
        tradeall.extend(tradeblues)
    purples = input("Paste purple pile here: ").split(", ")
    wantpurples = []
    for card in purples:
        if card in wantednames:
            wantpurples.append(card)
    if len(wantpurples) > 5:
        wantpurples = wantpurples[:5]
    if len(wantpurples) > 0:
        wantall.extend(wantpurples)
        tradepurplescount = len(wantpurples)
        tradepurples = []
        tradepurples.extend(random.sample(purpletrade,len(wantpurples)))
        tradeall.extend(tradepurples)
    browns = input("Paste brown pile here: ").split(", ")
    wantbrowns = []
    for card in browns:
        if card in wantednames:
            wantbrowns.append(card)
    if len(wantbrowns) > 5:
        wantbrowns = wantbrowns[:5]
    if len(wantbrowns) > 0:
        wantall.extend(wantbrowns)
        tradebrownscount = len(wantbrowns)
        tradebrowns = []
        tradebrowns.extend(random.sample(browntrade,len(wantbrowns)))
        tradeall.extend(tradebrowns)
    greys = input("Paste grey pile here: ").split(", ")
    wantgreys = []
    for card in greys:
        if card in wantednames:
            wantgreys.append(card)
    if len(wantgreys) > 5:
        wantgreys = wantgreys[:5]
    if len(wantgreys) > 0:
        wantall.extend(wantgreys)
        tradegreyscount = len(wantgreys)
        tradegreys = []
        tradegreys.extend(random.sample(greytrade,len(wantgreys)))
        tradeall.extend(tradegreys)
    chaos = input("Paste chaos pile here: ").split(", ")
    wantchaos = []
    for card in chaos:
        if card in wantednames:
            wantchaos.append(card)
    if len(wantchaos) > 5:
        wantchaos = wantchaos[:5]
    if len(wantchaos) > 0:
        wantall.extend(wantchaos)
        tradechaos = input("Provide " + str(len(wantchaos)) + " cards for the chaos pile (for " + ", ".join(tradechaos) + "): ").split(", ")
        tradeall.extend(tradechaos)
    print("\n")
    if len(wantreds) > 0:
        print("red: " + ", ".join(tradereds) + " for " + ", ".join(wantreds))
    if len(wantoranges) > 0:
        print("orange: " + ", ".join(tradeoranges) + " for " + ", ".join(wantoranges))
    if len(wantyellows) > 0:
        print("yellow: " + ", ".join(tradeyellows) + " for " + ", ".join(wantyellows))
    if len(wantgreens) > 0:
        print("green: " + ", ".join(tradegreens) + " for " + ", ".join(wantgreens))
    if len(wantblues) > 0:
        print("blue: " + ", ".join(tradeblues) + " for " + ", ".join(wantblues))
    if len(wantpurples) > 0:
        print("purple: " + ", ".join(tradepurples) + " for " + ", ".join(wantpurples))
    if len(wantbrowns) > 0:
        print("brown: " + ", ".join(tradebrowns) + " for " + ", ".join(wantbrowns))
    if len(wantgreys) > 0:
        if variables.british:
            print("grey: " + ", ".join(tradegreys) + " for " + ", ".join(wantgreys))
        else:
            print("gray: " + ", ".join(tradegreys) + " for " + ", ".join(wantgreys))
    if len(wantchaos) > 0:
        print("chaos: " + ", ".join(tradechaos) + " for " + ", ".join(wantchaos))
    images = ""
    for card in tradeall:
        images += "<img src=\"https://colors-tcg.eu/cards/" + card + ".gif\">"
    print("\n" + images + "\n")
    switchround = input("Round number: ")
    switchcomment = input("Comment URL: ")
    print("\n{\"event\":\"switch it up " + switchround + "\",\"date\":datetime.datetime(" + datetime.datetime.today().strftime("%Y,%-m,%-d") + "),\"url\":\"" + switchcomment + "\",\"pend\":[\"" + "\",\"".join(wantall) + "\"],\"lost\":[\"" + "\",\"".join(tradeall) + "\"]}")

def fish():
    fishdecks = input("Paste list of decks here: ").split(", ")
    fishfound = []
    for card in cardlist:
        for deck in fishdecks:
            if card["name"][:-2] == deck:
                fishfound.append(card)
                break
    fishrefined = []
    previouscard = ""
    for card in fishfound:
        try:
            if card["name"][:-2] != previouscard["name"][:-2]:
                fishrefined.append(card)
        except:
            fishrefined.append(card)
        previouscard = card
    fishmastered = []
    fishhp = []
    fishmp = []
    fishlp = []
    fishmass = []
    fishtrade = []
    for card in fishrefined:
        if card["priority"] == 1:
            for deck in decklist:
                if deck["name"] == card["name"][:-2]:
                    if deck["mastered"]:
                        fishmastered.append(card)
                    else:
                        fishhp.append(card)
        elif card["priority"] == 2:
            if card["mass"]:
                for deck in decklist:
                    if deck["name"] == card["name"][:-2]:
                        if deck["mass"]:
                            fishmp.append(card)
                        else:
                            fishmass.append(card)
            else:
                fishmp.append(card)
        elif card["priority"] == 3:
            fishlp.append(card)
        else:
            fishtrade.append(card)
    locations = []
    if len(fishmastered) > 0:
        locations.append("mastered")
    if len(fishhp) > 0:
        locations.append("collecting/high priority")
    if len(fishmp) > 0:
        locations.append("collecting/medium priority")
    if len(fishlp) > 0:
        locations.append("collecting/low priority")
    if len(fishmass) > 0:
        for card in fishmass:
            locations.append("mass collecting/" + card["mass"][0])
    if len(fishtrade) > 0:
        locations.append("trading")
    locations = list(dict.fromkeys(locations))
    cardnames = []
    for card in fishrefined:
        cardnames.append(card["name"])
    print("\nTrade post: " + variables.url + "\nNumber of matches: " + str(len(fishrefined)) + "\nCard name(s): " + ", ".join(cardnames) + "\nWhere cards are located: " + ", ".join(locations) + "\nCards:")
    images = ""
    for card in fishrefined:
        images += "<img src=\"https://colors-tcg.eu/cards/" + card["name"] + ".gif\">"
    print(images)

if __name__ == "__main__":
    print("Building index page")

def indexgen():
    if os.path.exists("build/index.html"):
        os.remove("build/index.html")
    thefile = "build/index.html"
    headerwrite(thefile,"index")
    content = open(thefile,"a")
    firstdate = log.log[0]["date"]
    if len(cardlist) > 14400:
        rankcode = "rainbow"
        extra = len(cardlist) - 14400
        plusranks = int(extra / 300)
        if plusranks > 0:
            rank = "rainbow + " + str(plusranks)
        else:
            rank = "rainbow"
    else:
        if len(cardlist) > 14100:
            rank = "himalayan"
        elif len(cardlist) > 13800:
            rank = "puma"
        elif len(cardlist) > 13500:
            rank = "chartreux"
        elif len(cardlist) > 13500:
            rank = "russian blue"
        elif len(cardlist) > 12900:
            rank = "panther"
        elif len(cardlist) > 12600:
            rank = "cheetah"
        elif len(cardlist) > 12300:
            rank = "tiger"
        elif len(cardlist) > 12000:
            rank = "lion"
        elif len(cardlist) > 11700:
            rank = "metal"
        elif len(cardlist) > 11400:
            rank = "ground"
        elif len(cardlist) > 11100:
            rank = "darkness"
        elif len(cardlist) > 10800:
            rank = "water"
        elif len(cardlist) > 10500:
            rank = "nature"
        elif len(cardlist) > 10200:
            rank = "light"
        elif len(cardlist) > 9900:
            rank = "wind"
        elif len(cardlist) > 9600:
            rank = "fire"
        elif len(cardlist) > 9300:
            rank = "mercury"
        elif len(cardlist) > 9000:
            rank = "jupiter"
        elif len(cardlist) > 8700:
            rank = "uranus"
        elif len(cardlist) > 8400:
            rank = "neptune"
        elif len(cardlist) > 8100:
            rank = "earth"
        elif len(cardlist) > 7800:
            rank = "venus"
        elif len(cardlist) > 7500:
            rank = "saturn"
        elif len(cardlist) > 7200:
            rank = "mars"
        elif len(cardlist) > 6900:
            rank = "magnolia"
        elif len(cardlist) > 6600:
            rank = "chocolate cosmos"
        elif len(cardlist) > 6300:
            rank = "lilac"
        elif len(cardlist) > 6000:
            rank = "hydrangea"
        elif len(cardlist) > 5700:
            rank = "clover"
        elif len(cardlist) > 5400:
            rank = "daffodil"
        elif len(cardlist) > 5100:
            rank = "tiger lily"
        elif len(cardlist) > 4800:
            rank = "sakura"
        elif len(cardlist) > 4500:
            rank = "silver"
        elif len(cardlist) > 4200:
            rank = "bronze"
        elif len(cardlist) > 3900:
            rank = "amethyst"
        elif len(cardlist) > 3600:
            rank = "sapphire"
        elif len(cardlist) > 3300:
            rank = "emerald"
        elif len(cardlist) > 3000:
            rank = "gold"
        elif len(cardlist) > 2700:
            rank = "amber"
        elif len(cardlist) > 2400:
            rank = "ruby"
        elif len(cardlist) > 2200:
            rank = "dragon fruit"
        elif len(cardlist) > 2000:
            rank = "apricot"
        elif len(cardlist) > 1800:
            rank = "grape"
        elif len(cardlist) > 1600:
            rank = "blueberry"
        elif len(cardlist) > 1400:
            rank = "lime"
        elif len(cardlist) > 1200:
            rank = "lemon"
        elif len(cardlist) > 1000:
            rank = "tangerine"
        elif len(cardlist) > 800:
            rank = "strawberry"
        elif len(cardlist) > 700:
            rank = "gray"
        elif len(cardlist) > 600:
            rank = "brown"
        elif len(cardlist) > 500:
            rank = "purple"
        elif len(cardlist) > 400:
            rank = "blue"
        elif len(cardlist) > 300:
            rank = "green"
        elif len(cardlist) > 200:
            rank = "yellow"
        elif len(cardlist) > 100:
            rank = "orange"
        else:
            rank = "red"
        rankcode = re.sub(" ","",rank)
    content.write("<a href=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/levels\"><img src=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/assets/levels/" + rankcode + ".gif\"></a><img src=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/decks/sigs/" + variables.name.lower() + ".gif\" loading=\"lazy\">\n<ul>\n<li>player name: <span class=\"name\">" + variables.name + "</span></li>\n<li>" + str(len(cardlist)) + " cards held <span class=\"rank " + rank + "\">(" + rank + ")</span></li>\n<li>started <code>" + firstdate.strftime("%Y-%m-%d") + "</code></li>\n<li>last updated <code>" + datetime.datetime.today().strftime("%Y-%m-%d") + "</code></li>\n<li><a href=\"https://git.praze.net/tre/tcg\" target=\"_blank\">code</a> under construction</li>\n")
    if len(variables.misclink["text"]) > 0:
        content.write("<li><a href=\"" + variables.misclink["link"] + "\">" + variables.misclink["text"] + "</a></li>\n")
    content.write("</ul>\n")
    if crayred + crayorange + crayyellow + craygreen + crayblue + craypurple + craybrown + craygrey > 0:
        content.write("<table id=\"crayontable\">\n<tbody>\n<tr>\n")
        if crayred > 0:
            content.write("<td class=\"red\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon1.gif\" class=\"crayon\" title=\"red\"> Ɨ " + str(crayred) + "</td>\n")
        if crayorange > 0:
            content.write("<td class=\"orange\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon2.gif\" class=\"crayon\" title=\"orange\"> Ɨ " + str(crayorange) + "</td>\n")
        if crayyellow > 0:
            content.write("<td class=\"yellow\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon3.gif\" class=\"crayon\" title=\"yellow\"> Ɨ " + str(crayyellow) + "</td>\n")
        if craygreen > 0:
            content.write("<td class=\"green\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon4.gif\" class=\"crayon\" title=\"green\"> Ɨ " + str(craygreen) + "</td>\n")
        if crayblue > 0:
            content.write("<td class=\"blue\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon5.gif\" class=\"crayon\" title=\"blue\"> Ɨ " + str(crayblue) + "</td>\n")
        if craypurple > 0:
            content.write("<td class=\"purple\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon6.gif\" class=\"crayon\" title=\"purple\"> Ɨ " + str(craypurple) + "</td>\n")
        if craybrown > 0:
            content.write("<td class=\"brown\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon7.gif\" class=\"crayon\" title=\"brown\"> Ɨ " + str(craybrown) + "</td>\n")
        if craygrey > 0:
            content.write("<td class=\"grey\"><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/crayons/crayon8.gif\" class=\"crayon\" title=\"")
            if variables.british:
                content.write("grey")
            else:
                content.write("gray")
            content.write("\"> Ɨ " + str(craygrey) + "</td>\n")
        content.write("</tr>\n</tbody>\n</table>\n")
    tradecommon = list((Counter(tradeout) & Counter(tradein)).elements())
    sketch = len(tradecommon)
    if sketch > 0:
        content.write("<table class=\"sketchpads\">\n<tbody>\n<tr>\n<td><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/sketch/")
        if sketch % 20 < 10:
            content.write("0" + str(sketch % 20))
        else:
            content.write(str(sketch % 20))
        content.write(".gif\"></td>\n")
        if sketch > 19:
            content.write("<td><img src=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("/assets/sketch/20.gif\" title=\"")
            sketchdifference = int(sketch / 20) - redeemedsketch
            if sketchdifference > 0:
                content.write(str(sketchdifference) + " to turn in")
            else:
                content.write("all turned in")
            content.write("\"></td>\n")
        content.write("</tr>\n<tr>\n<td align=\"center\">" + str(sketch % 20) + "/20</td>\n")
        if sketch > 19:
            content.write("<td align=\"center\">" + str(int(sketch / 20)) + " completed</td>\n")
        content.write("</tr>\n</tbody>\n</table>")
    if latestpalette + latestmonochrome > 0:
        content.write("<a href=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/portfolios\">\n<div class=\"foliocase\">\n")
        if latestpalette > 0:
            content.write(portfoliogen(portfolios[latestpalette-1],"palette",palettes))
        if latestmonochrome > 0:
            content.write(portfoliogen(portfolios[latestmonochrome-1],"monochrome",monochromes))
        content.write("</div>\n</a>\n")
    decksofinterest = []
    mastereddecks = []
    for deck in decklist:
        if deck["mastered"]:
            mastereddecks.append(deck)
    mastereddecks = sorted(mastereddecks,key=lambda d: d["mastered"],reverse=True)
    if len(mastereddecks) > 0:
        content.write("<h2>mastered decks</h2>\n<p id=\"masteredcarousel\">")
        masteredcount = 0
        for deck in mastereddecks:
            if masteredcount < variables.maxmastered:
                content.write("<img src=\"")
                if len(variables.subfolder) > 0:
                    content.write("/" + variables.subfolder)
                content.write("/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"])
                try:
                    if deck["name"] in variables.firstmasteries:
                        content.write(" (first)\" class=\"first")
                except:
                    pass
                content.write("\">")
            masteredcount += 1
        if len(mastereddecks) > variables.maxmastered:
            content.write(" <a href=\"")
            if len(variables.subfolder) > 0:
                content.write("/" + variables.subfolder)
            content.write("mastered\">see&nbsp;all</a>")
        content.write("</p>\n")
    sigs = []
    for card in cardlist:
        if card["name"][0:4] == "sig_":
            sigs.append(card)
    if len(sigs) > 0:
        content.write("<h2>signatures</h2>\n<p>")
        for card in sigs:
            content.write(printcard(card))
        content.write("</p>\n")
    if len(variables.faves) > 0:
        content.write("<h2>faves</h2>\n<p>")
        faveslist = sorted(variables.faves)
        for card in faveslist:
            content.write(printcard(card))
        content.write("</p>\n")
    if len(coupons) > 0:
        content.write("<h2>coupons</h2>\n<p>")
        for coupon in coupons:
            for key,value in coupon.items():
                content.write("<img src=\"")
                if len(variables.subfolder) > 0:
                    content.write("/" + variables.subfolder)
                content.write("/assets/coupons/" + key + ".png\" class=\"coupon")
                if value == 0:
                    content.write(" expired\" title=\"expired\"")
                else:
                    content.write("\" title=\"" + str(value) + " left\"")
                content.write(" loading=\"lazy\">")
        content.write("</p>\n")
    donations = []
    try:
        for donatedeck in variables.donations["decks"]:
            donation = {}
            donation["name"] = donatedeck
            for deck in decklist:
                if deck["name"] == donatedeck:
                    if deck["mastered"]:
                        donation["type"] = "mastered"
                    else:
                        donation["type"] = "deck"
                    break
            donations.append(donation)
    except:
        pass
    try:
        for card in variables.donations["scrapbook"]:
            donation = {}
            donation["name"] = card
            donation["type"] = "single"
            donations.append(donation)
    except:
        pass
    if len(donations) > 0:
        donations = sorted(donations, key=lambda d: d["name"])
        content.write("<h2>donations</h2>\n<p>")
        for donation in donations:
            if donation["type"] == "deck":
                content.write("<img src=\"")
                if len(variables.subfolder) > 0:
                    content.write("/" + variables.subfolder)
                content.write("/decks/" + donation["name"] + "/00.gif\" loading=\"lazy\">")
            elif donation["type"] == "mastered":
                content.write("<img src=\"")
                if len(variables.subfolder) > 0:
                    content.write("/" + variables.subfolder)
                content.write("/decks/" + donation["name"] + "/master.gif\" title=\"mastered " + donation["name"])
                try:
                    if donation["name"] in variables.firstmasteries:
                        content.write(" (first)\" class=\"first")
                except:
                    pass
                content.write("\">")
            elif donation["type"] == "single":
                content.write(printcard(donation["name"]))
        content.write("</p>\n")
    content.close()
    footerwrite(thefile)

if __name__ == "__main__":
    indexgen()
    print("Building levels page")

def levelsgen():
    if not os.path.isdir("build/levels"):
        os.mkdir("build/levels")
    if os.path.exists("build/levels/index.html"):
        os.remove("build/levels/index.html")
    thefile = "build/levels/index.html"
    headerwrite(thefile,"levels")
    content = open(thefile,"a")
    content.write("<h1>levels</h1>\n<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/assets/levels/red.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[0].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 100:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/orange.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/yellow.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 300:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/green.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/blue.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 500:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/purple.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/brown.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 700:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/gray.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/strawberry.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 1000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/tangerine.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 1200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/lemon.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 1400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/lime.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 1600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/blueberry.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 1800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/grape.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[1800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 2000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/apricot.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 2200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/dragonfruit.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 2400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/ruby.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 2700:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/amber.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[2700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 3000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/gold.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 3300:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/emerald.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 3600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/sapphire.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 3900:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/amethyst.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[3900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 4200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/bronze.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 4500:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/silver.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 4800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/sakura.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[4800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 5100:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/tigerlily.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 5400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/daffodil.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 5700:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/clover.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[5700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 6000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/hydrangea.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 6300:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/lilac.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 6600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/chocolatecosmos.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 6900:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/magnolia.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[6900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 7200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/mars.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 7500:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/saturn.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 7800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/venus.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[7800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 8100:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/earth.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 8400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/neptune.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 8700:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/uranus.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[8700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 9000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/jupiter.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 9300:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/mercury.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 9600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/fire.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 9900:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/wind.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[9900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 10200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/light.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 10500:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/nature.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 10800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/water.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[10800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 11100:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/darkness.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 11400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/ground.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 11700:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/metal.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[11700].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 12000:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/lion.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12000].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 12300:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/tiger.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12300].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 12600:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/cheetah.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12600].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 12900:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/panther.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[12900].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 13200:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/russianblue.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13200].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 13500:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/chartreux.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13500].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 13800:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/puma.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[13800].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 14100:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/himalayan.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[14100].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    if len(cardlist) > 14400:
        content.write("<table class=\"level\">\n<tbody>\n<tr>\n<td align=\"center\"><img src=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/assets/levels/rainbow.gif\" loading=\"lazy\"></td>\n</tr>\n<tr>\n<td align=\"center\"><code>" + datelist[14400].strftime("%Y-%m-%d") + "</code></td>\n</tr>\n</tbody>\n</table>\n")
    content.close()
    footerwrite(thefile)

if __name__ == "__main__":
    levelsgen()
    print("Building portfolios page")

def portfoliosgen(colour=False):
    if not os.path.isdir("build/portfolios"):
        os.mkdir("build/portfolios")
    if colour:
        if not os.path.isdir("build/portfolios/" + colour):
            os.mkdir("build/portfolios/" + colour)
        thefile = "build/portfolios/" + colour + "/index.html"
    else:
        thefile = "build/portfolios/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"portfolios")
    content = open(thefile,"a")
    content.write("<h1>portfolios</h1>\n")
    if latestpalette + latestmonochrome > 0:
        if latestpalette > 0:
            content.write("<div class=\"foliocase\">\n")
            portnumber = 1
            for portfolio in portfolios:
                if portfolio["type"] == "palette":
                    content.write(portfoliogen(portfolio,"palette",portnumber))
                    portnumber += 1
            content.write("</div>\n")
        if latestmonochrome > 0:
            content.write("<div class=\"foliocase\">\n")
            portnumber = 1
            for portfolio in portfolios:
                if portfolio["type"] == "monochrome":
                    content.write(portfoliogen(portfolio,"monochrome",portnumber))
                    portnumber += 1
            content.write("</div>\n")
    content.close()
    footerwrite(thefile)
        
if __name__ == "__main__":
    portfoliosgen()
    print("Building collecting page")

def collectinggen(colour=False):
    if not os.path.isdir("build/collecting"):
        os.mkdir("build/collecting")
    if colour:
        if not os.path.isdir("build/collecting/" + colour):
            os.mkdir("build/collecting/" + colour)
        thefile = "build/collecting/" + colour + "/index.html"
    else:
        thefile = "build/collecting/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"collecting")
    content = open(thefile,"a")
    content.write("<h1>decks in progress</h1>\n" + filterwrite("collecting",colour) + "<div>\n<h2 class=\"collectingheader\">High priority</h2>\n")
    for deck in decklist:
        if deck["priority"] == 1 and deck["mastered"] == False:
            if colour:
                if deck["colour"] == colour:
                    content.write(printdeck(deck,False))
            else:
                content.write(printdeck(deck,False))
    content.write("</div>\n<div>\n<h2 class=\"collectingheader\">Medium priority</h2>\n")
    for deck in decklist:
        if deck["priority"] == 2 and deck["mastered"] == False:
            if colour:
                if deck["colour"] == colour:
                    content.write(printdeck(deck))
            else:
                content.write(printdeck(deck))
    content.write("</div>\n<div>\n<h2 class=\"collectingheader\">Low priority</h2>\n")
    for deck in decklist:
        if deck["priority"] == 3 and deck["mastered"] == False:
            if colour:
                if deck["colour"] == colour:
                    content.write(printdeck(deck))
            else:
                content.write(printdeck(deck))
    content.write("</div>\n")
    content.close()
    footerwrite(thefile)

def collectingall():
    collectinggen()
    for thevalue in values:
        collectinggen(thevalue)
        
if __name__ == "__main__":
    collectingall()
    print("Building mass collecting pages")

masslist = sorted(list(variables.masscollect.keys()))

def massindexgen():
    if not os.path.isdir("build/mass"):
        os.mkdir("build/mass")
    thefile = "build/mass/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"mass")
    content = open(thefile,"a")
    content.write("<h1>mass collecting/keeping</h1>\n<ul>\n")
    massindex = 1
    for series in masslist:
        content.write("<li><a href=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/mass/" + str(massindex) + "\">" + series + "</a></li>\n")
        massindex += 1
    content.write("</ul>\n")
    content.close()
    footerwrite(thefile)

def massseriesgen(series,massindex):
    if not os.path.isdir("build/mass/" + str(massindex)):
        os.mkdir("build/mass/" + str(massindex))
    thefile = "build/mass/" + str(massindex) + "/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"mass")
    content = open(thefile,"a")
    content.write("<h1>" + series + "</h1>\n<p><a href=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/mass\">back to mass decks page</a></p>\n<p>")
    for deck in decklist:
        if deck["mastered"]:
            if series in deck["mass"] or series in deck["massmaster"]:
                content.write("<img src=\"")
                if len(variables.subfolder) > 0:
                    content.write("/" + variables.subfolder)
                content.write("/decks/" + deck["name"] + "/master.gif\" title=\"mastered " + deck["name"])
                try:
                    if deck["name"] in variables.firstmasteries:
                        content.write(" (first)\" class=\"first")
                except:
                    pass
                content.write("\">")
    content.write("</p><p>")
    for card in cardlist:
        if series in card["mass"]:
            if card["dupe"] == False:
                content.write(printcard(card))
    content.write("</p>\n")
    content.close()
    footerwrite(thefile)
        
def massall():
    massindexgen()
    massindex = 1
    for series in masslist:
        massseriesgen(series,massindex)
        massindex += 1

if __name__ == "__main__":
    massall()
    print("Building mastered page")

def masteredgen(colour=False):
    if not os.path.isdir("build/mastered"):
        os.mkdir("build/mastered")
    if colour:
        if not os.path.isdir("build/mastered/" + colour):
            os.mkdir("build/mastered/" + colour)
        thefile = "build/mastered/" + colour + "/index.html"
    else:
        thefile = "build/mastered/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"mastered")
    content = open(thefile,"a")
    content.write("<h1>mastered decks</h1>\n")
    content.write(filterwrite("mastered",colour))
    for deck in decklist:
        if deck["mastered"]:
            if colour:
                if deck["colour"] == colour:
                    content.write(printdeck(deck))
            else:
                content.write(printdeck(deck))
    content.close()
    footerwrite(thefile)

def masteredall():
    masteredgen()
    for thevalue in values:
        masteredgen(thevalue)
        
if __name__ == "__main__":
    masteredall()
    print("Building trading page")

tradelist = []
sigtradelist = []
for card in cardlist:
    if card["priority"] == 4:
        tradelist.append(card)
    elif card["priority"] == 5:
        sigtradelist.append(card)
alltradelist = tradelist + sigtradelist

def tradegen(colour=False):
    if not os.path.isdir("build/trade"):
        os.mkdir("build/trade")
    if colour:
        if not os.path.isdir("build/trade/" + colour):
            os.mkdir("build/trade/" + colour)
        thefile = "build/trade/" + colour + "/index.html"
    else:
        thefile = "build/trade/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"trade")
    content = open(thefile,"a")
    content.write("<h1>available for trade</h1>\n" + filterwrite("trade",colour,True) + "<p class=\"tradeterms\">")
    if len(variables.tradestatement) > 0:
        content.write(variables.tradestatement + " ")
    content.write("Trade cards <a href=\"" + variables.tradepost + "\">here</a></p>\n<p><textarea readonly>")
    precomma = False
    for card in alltradelist:
        if colour:
            if card["colour"] == colour:
                if precomma:
                    content.write(", ")
                content.write(card["name"])
                precomma = True
        else:
            if precomma:
                content.write(", ")
            content.write(card["name"])
            precomma = True
    content.write("</textarea>\n<p>")
    for card in alltradelist:
        if colour:
            if card["colour"] == colour:
                content.write(printcard(card))
        else:
            content.write(printcard(card))
    content.write("</p>\n")
    content.close()
    footerwrite(thefile)

def tradeall():
    tradegen()
    for thevalue in values:
        tradegen(thevalue)
    tradegen("sig")
        
if __name__ == "__main__":
    tradeall()
    print("Building wanted page")

def wantedgen():
    if not os.path.isdir("build/wanted"):
        os.mkdir("build/wanted")
    if os.path.exists("build/wanted/index.html"):
        os.remove("build/wanted/index.html")
    thefile = "build/wanted/index.html"
    headerwrite(thefile,"wanted")
    content = open(thefile,"a")
    content.write("<h1>wanted cards</h1>\n<h2>High priority</h2>\n<textarea readonly>")
    precomma = False
    for card in wantedlist:
        if card["priority"] == 1:
            if precomma:
                content.write(", ")
            content.write(card["name"])
            precomma = True
    precomma = False
    content.write("</textarea>\n<p>")
    for card in wantedlist:
        if card["priority"] == 1:
            if precomma:
                content.write(", ")
            content.write(cardtext(card))
            precomma = True
    precomma = False
    content.write("</p>\n<h2>Medium priority</h2>\n<textarea readonly>")
    for card in wantedlist:
        if card["priority"] == 2:
            if precomma:
                content.write(", ")
            content.write(card["name"])
            precomma = True
    precomma = False
    content.write("</textarea>\n<p>")
    for card in wantedlist:
        if card["priority"] == 2:
            if precomma:
                content.write(", ")
            content.write(cardtext(card))
            precomma = True
    precomma = False
    content.write("</p>\n<h2>Low priority</h2>\n<textarea readonly>")
    for card in wantedlist:
        if card["priority"] == 3:
            if precomma:
                content.write(", ")
            content.write(card["name"])
            precomma = True
    precomma = False
    content.write("</textarea>\n<p>")
    for card in wantedlist:
        if card["priority"] == 3:
            if precomma:
                content.write(", ")
            content.write(cardtext(card))
            precomma = True
    content.write("</p>\n")
    content.close()
    footerwrite(thefile)

if __name__ == "__main__":
    wantedgen()
    print("Building search page")

def searchgen():
    if not os.path.isdir("build/search"):
        os.mkdir("build/search")
    thefile = "build/search/index.html"
    if os.path.exists(thefile):
        os.remove(thefile)
    headerwrite(thefile,"search")
    content = open(thefile,"a")
    content.write("<h1>card search</h1>\n<form>\n  <label for=\"cardinput\">Enter a list of cards and/or decks here:</label>\n  <textarea id=\"cardinput\" name=\"cardinput\"></textarea>\n  <input type=\"button\" value=\"Search\" onclick=\"searchcards()\">\n</form>\n<p id=\"hpwfound\"></p>\n<p id=\"mpwfound\"></p>\n<p id=\"lpwfound\"></p>\n<p id=\"hptfound\"></p>\n<p id=\"mptfound\"></p>\n<p id=\"lptfound\"></p>\n<p id=\"nothing\"></p>\n<script>\n function searchcards() {\n     const thecards = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'];\n     const hpw = [")
    precomma = False
    for card in wantedlist:
        if card["priority"] == 1:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const mpw = [")
    precomma = False
    for card in wantedlist:
        if card["priority"] == 2:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const lpw = [")
    precomma = False
    for card in wantedlist:
        if card["priority"] == 3:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const hpt = [")
    precomma = False
    for card in cardlist:
        if card["priority"] == 2:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const mpt = [")
    precomma = False
    for card in cardlist:
        if card["priority"] == 3:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const lpt = [")
    precomma = False
    for card in cardlist:
        if card["priority"] == 4:
            if precomma:
                content.write(", ")
            content.write("'" + card["name"] + "'")
            precomma = True
    content.write("];\n     const searchstring = document.getElementById('cardinput').value;\n     const dupesarray = searchstring.replaceAll(' ','').replaceAll('\\n',',').replaceAll('\\r',',').replaceAll('šŸ”“','').replaceAll('šŸŸ ','').replaceAll('šŸŸ”','').replaceAll('šŸŸ¢','').replaceAll('šŸ”µ','').replaceAll('šŸŸ£','').replaceAll('šŸŸ¤','').replaceAll('āšŖ','').replaceAll('āœØ','').replaceAll('šŸŒˆ','').replaceAll('āœ','').toLowerCase().split(',');\n     const searcharray = [ ...new Set(dupesarray) ];\n     const hpwfound = [];\n     const mpwfound = [];\n     const lpwfound = [];\n     const hptfound = [];\n     const mptfound = [];\n     const lptfound = [];\n     for (const element of searcharray) {\n         let cardend = element.substring(element.length, element.length - 2);\n         if (!(thecards.includes(cardend))) {\n             for (const ending of thecards) {\n                 searcharray.push(element + ending);\n             };\n         };\n     };\n     for (const element of searcharray) {\n         if (hpw.includes(element)) {\n             hpwfound.push(element);\n         };\n         if (mpw.includes(element)) {\n             mpwfound.push(element);\n         };\n         if (lpw.includes(element)) {\n             lpwfound.push(element);\n         };\n         if (hpt.includes(element)) {\n             hptfound.push(element);\n         };\n         if (mpt.includes(element)) {\n             mptfound.push(element);\n         };\n         if (lpt.includes(element)) {\n             lptfound.push(element);\n         };\n     };\n     if ((hpwfound.length) > 0) {\n         document.getElementById('hpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (high priority):</span> <span class=\"searchresults\">' + hpwfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('hpwfound').innerHTML = '';\n     };\n     if ((mpwfound.length) > 0) {\n         document.getElementById('mpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (medium priority):</span>  <span class=\"searchresults\">' + mpwfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('mpwfound').innerHTML = '';\n     };\n     if ((lpwfound.length) > 0) {\n         document.getElementById('lpwfound').innerHTML = '<span class=\"sorttitle\">Wanted (low priority):</span>  <span class=\"searchresults\">' + lpwfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('lpwfound').innerHTML = '';\n     };")
    if variables.trademedium:
        content.write("\n     if ((hptfound.length) > 0) {\n         document.getElementById('hptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/wanted\">high priority cards</a> only:</span>  <span class=\"searchresults\">' + hptfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('hptfound').innerHTML = '';\n     };")
    content.write("\n     if ((mptfound.length) > 0) {\n         document.getElementById('mptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/wanted\">high or medium priority cards</a>:</span>  <span class=\"searchresults\">' + mptfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('mptfound').innerHTML = '';\n     };\n     if ((lptfound.length) > 0) {\n         document.getElementById('lptfound').innerHTML = '<span class=\"sorttitle\">Will trade out for <a href=\"")
    if len(variables.subfolder) > 0:
        content.write("/" + variables.subfolder)
    content.write("/wanted\">any wanted card</a>:</span>  <span class=\"searchresults\">' + lptfound.join(', ') + '</span>';\n     } else {\n         document.getElementById('lptfound').innerHTML = '';\n     };\n     if ((hpwfound.length) + (mpwfound.length) + (lpwfound.length)")
    if variables.trademedium:
        content.write(" + (hptfound.length)")
    content.write(" + (mptfound.length) + (lptfound.length) == 0) {\n         document.getElementById('nothing').innerHTML = 'No results';\n     } else {\n         document.getElementById('nothing').innerHTML = '';\n     }\n }\n</script>\n    </main>\n  </body>\n</html>")
    content.close()

if __name__ == "__main__":
    searchgen()
    print("Building log page")

def loggen(month=False):
    if month:
        if not os.path.isdir("build/log/month"):
            os.mkdir("build/log/month")
        if os.path.exists("build/log/month/index.html"):
            os.remove("build/log/month/index.html")
        thefile = "build/log/month/index.html"
    else:
        if not os.path.isdir("build/log"):
            os.mkdir("build/log")
        if os.path.exists("build/log/index.html"):
            os.remove("build/log/index.html")
        thefile = "build/log/index.html"
    headerwrite(thefile,"log")
    content = open(thefile,"a")
    content.write("<h1>log</h1>\n<p class=\"typefilter\">")
    if month:
        content.write("<a href=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/log\">Show all</a>")
    else:
        content.write("<a href=\"")
        if len(variables.subfolder) > 0:
            content.write("/" + variables.subfolder)
        content.write("/log/month\">Show current month only</a>")
    content.write("</p>\n")
    for event in logitems:
        if month:
            if event["date"].month == datetime.datetime.now().month and event["date"].year == datetime.datetime.now().year:
                admit = True
            else:
                admit = False
        else:
            admit = True
        if admit == True:
            content.write("<p><code>" + event["date"].strftime("%Y-%m-%d") + "</code> <a href=\"" + event["url"] + "\">[" + event["name"] + "]</a>: ")
            try:
                if event["received"]:
                    content.write("Received ")
                    receivedlist = sorted(event["received"], key=lambda d: d["name"])
                    position = 1
                    for card in receivedlist:
                        content.write(cardtext(card))
                        if len(receivedlist) != position:
                            content.write(", ")
                        position += 1
                    content.write(".")
                    try:
                        if event["lost"]:
                            content.write(" ")
                    except:
                        try:
                            if event["crayons"]:
                                content.write(" ")
                        except:
                            pass
            except:
                pass
            try:
                if event["lost"]:
                    content.write("Lost ")
                    lostlist = sorted(event["lost"], key=lambda d: d["name"])
                    position = 1
                    for card in lostlist:
                        content.write(cardtext(card))
                        if len(lostlist) != position:
                            content.write(", ")
                        position += 1
                    content.write(".")
                    try:
                        if event["crayons"]:
                            content.write(" ")
                    except:
                        pass
            except:
                pass
            try:
                if event["crayons"]:
                    content.write("Crayons: ")
                    try:
                        content.write(crayonlog("red",event))
                        if list(event["crayons"])[-1] != "red":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("orange",event))
                        if list(event["crayons"])[-1] != "orange":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("yellow",event))
                        if list(event["crayons"])[-1] != "yellow":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("green",event))
                        if list(event["crayons"])[-1] != "green":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("blue",event))
                        if list(event["crayons"])[-1] != "blue":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("purple",event))
                        if list(event["crayons"])[-1] != "purple":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("brown",event))
                        if list(event["crayons"])[-1] != "brown":
                            content.write(", ")
                    except:
                        pass
                    try:
                        content.write(crayonlog("grey",event))
                    except:
                        pass
                    content.write(".")
            except:
                pass
            content.write("</p>\n")
    content.close()
    footerwrite(thefile)

def logall():
    loggen(False)
    loggen(True)

if __name__ == "__main__":
    logall()