from Database.database import QuestionDataBase
import random


class Game:
    def __init__(self, teamsize=0, correct_field=0):
        self.teamsize = teamsize
        self.scoreboard = {'score_red': 0,
                           'score_green': 0,
                           'score_blue': 0
                          }

        self.questions = QuestionDataBase('src_folder/BackEnd/Database/EinsZweiOderDrei.db')
        self.available_questions = list(range(1, self.questions.num_rows()))
        self.field = correct_field
        self.question = {}
        self.final_score = {}

    def set_teamsize(self, teamsize: int):
        self.teamsize = teamsize
    
    def add_score(self, current_score: dict):
        for key in self.scoreboard.keys():
            if key in current_score.keys():
                self.scoreboard[key] = self.scoreboard[key] + current_score[key]
        return self.scoreboard
    
    def set_scoreboard(self, current_scores: dict):
        self.scoreboard = self.add_score(current_scores)
        return self.scoreboard
    
    def reset_game(self):
        self.scoreboard = {'score_red': 0,
                           'score_green': 0,
                           'score_blue': 0
                          }

    def get_question(self):
        questions = self.questions.cursor.execute("Select * from Questions")
        field_names = [i[0] for i in questions.description]

        questions_data = questions.fetchall()
        random_question_number = random.choice(self.available_questions)
        self.available_questions.remove(random_question_number)
        question= list(questions_data[random_question_number])
        self.question = dict(zip(field_names, question))
        self.shuffle_answeroptions()
        self.add_correct_field()

    def shuffle_answeroptions(self):
        answeroptions = ['Answeroption_1', 'Answeroption_2', 'Answeroption_3']
        keys = []
        print(self.question)

        for answer in answeroptions:
            keys.append(self.question[answer])
        random.shuffle(keys)

        for index, answer in enumerate(answeroptions):
            self.question[answer] = keys[index]

    def add_correct_field(self):
        answeroption = ['Answeroption_1', 'Answeroption_2', 'Answeroption_3', 'Correct_answeroption']
        for i in range(0, len(answeroption) -1):
            if self.question[answeroption[-1]] == self.question[answeroption[i]]:
                index = answeroption.index(answeroption[i]) + 1
                self.set_correct_field(index)
                break
        self.question.update([('Correct_field', index)])
    
    def set_correct_field(self, correct_field: int):
        self.field = correct_field

    def final_result(self):
        self.final_score = dict(sorted(self.scoreboard.items(), key=lambda x: x[1], reverse=True))



