import json
import urllib
import random

from . import money
from funcs import logThis

# Starts a game of trivia. Downloads a question with answers, shuffles the wrong answers with the
# correct answer and returns the questions and answers. Also saves the question in the games.json file.
def triviaStart(channel : str):
    with open("resources/games/games.json", "r") as f:
        triviaFile = json.load(f)
    
    logThis("Trying to find a trivia question for "+channel)

    if channel not in triviaFile["trivia questions"]:
        with urllib.request.urlopen("https://opentdb.com/api.php?amount=10&type=multiple") as response:
            data = json.loads(response.read())
        
        logThis("Found the question \""+data["results"][0]["question"]+"\"")
        answers = data["results"][0]["incorrect_answers"]
        answers.append(data["results"][0]["correct_answer"])
        random.shuffle(answers)
        correctAnswer = answers.index(data["results"][0]["correct_answer"]) + 97
        
        triviaFile["trivia questions"][channel] = {"answer" : str(chr(correctAnswer)),"players" : {}}
        with open("resources/games/games.json", "w") as f:
            json.dump(triviaFile,f,indent=4)

        replacements = {"&#039;": "\'",
                        "&quot;": "\"",
                        "&ldquo;": "\"",
                        "&rdquo;": "\"",
                        "&eacute;": "é"}
        question = data["results"][0]["question"]

        for key, value in replacements.items():
            question = question.replace(key,value)
        
        for answer in answers:
            for key, value in replacements.items():
                answer = answer.replace(key,value)

        return question, answers, correctAnswer
    else:
        logThis("There was already a trivia question for that channel (error code 1106)")
        return "There's already a trivia question going on. Try again in like, a minute (error code 1106)", "", ""

# Lets players answer a trivia question
def triviaAnswer(user : str, channel : str, command : str):
    with open("resources/games/games.json", "r") as f:
        data = json.load(f)
    
    if command in ["a","b","c","d"]:
        if channel in data["trivia questions"]:
            if user not in data["trivia questions"][channel]["players"]:
                logThis(user+" answered the question in "+channel)
                
                data["trivia questions"][channel]["players"][user] = command

                with open("resources/games/games.json", "w") as f:
                    json.dump(data,f,indent=4)

                return "Locked in "+user+"'s answer"
            else:
                logThis(user+" has already answered this question (error code 1105)")
                return user+" has already answered this question (error code 1105)"
        else:
            logThis("There's no question right now (error code 1104)")
            return "There's no question right now (error code 1104)"
    else:
        logThis("I didn't quite understand that (error code 1103)")
        return "I didn't quite understand that (error code 1103)"


# Adds 1 GwendoBuck to each player that got the question right and deletes question from games.json.
def triviaCountPoints(channel : str):
    with open("resources/games/games.json", "r") as f:
        data = json.load(f)

    logThis("Counting points for question in "+channel)

    if channel in data["trivia questions"]:
        for player, answer in data["trivia questions"][channel]["players"].items():
            if answer == data["trivia questions"][channel]["answer"]:
                money.addMoney(player,1)
        

    else:
        logThis("Couldn't find the question (error code 1102)")

    return None