import tkinter

from tkinter.messagebox import askyesno
from pacworms_global import CONST, VAR
from pacworms_levels import Levels
from extra_widgets import MyWidgetsConfig, MyButton, MyOptionMenu, MyScale
from threading import Thread
from edit_start import StartEdit
from game_start import StartGame

class StartPacworms:

    def __init__(self, master):
        """

        :param master:
        """

        #
        #   initialiser variables globales
        #
        VAR.my_widgets_config = MyWidgetsConfig()
        VAR.levels = Levels()

        self.background_color = "BLACK"
        self.window_editor = None

        #
        #   init. serie, numero du tableau et fonction
        #   du widget option menu
        #
        self.level_series_name = tkinter.StringVar()
        self.level_number = ["Easy", "Medium", "Hard"]
        self.level_series_name.set(self.level_number[0])
        self.level_series_name.trace('w', lambda *args: self.action_change_series())

        #
        #
        # main window
        #
        self.master = master
        tkinter.Tk.title(self.master, "Root Window Start")
        tkinter.Tk.resizable(self.master, width=True, height=True)
        tkinter.Tk.geometry(self.master, "%dx%d%+d%+d" % (CONST.WindowStartSize.width,
                                                          CONST.WindowStartSize.height,
                                                          100,
                                                          100))
        tkinter.Tk.protocol(self.master, "WM_DELETE_WINDOW", self.action_quit_pacworms)

        # tkinter.Tk.rowconfigure(self.master, 0, weight=1)
        tkinter.Tk.rowconfigure(self.master, 1, weight=1)
        tkinter.Tk.rowconfigure(self.master, 2, weight=1)
        # tkinter.Tk.rowconfigure(self.master, 3, weight=1)
        # tkinter.Tk.rowconfigure(self.master, 4, weight=1)

        tkinter.Tk.columnconfigure(self.master, 0, weight=1)
        tkinter.Tk.columnconfigure(self.master, 1, weight=1)
        tkinter.Tk.columnconfigure(self.master, 2, weight=1)

        tkinter.Tk.config(self.master, background=self.background_color)

        #
        #   chargement des images
        #
        image_pacworms_title = tkinter.PhotoImage(file="pacwormstitle.gif")
        image_pacworms_logo = tkinter.PhotoImage(file="pacwormslogo.gif")

        #
        #   widgets label image PACWORMS title, LOGO
        #
        label_image_title = tkinter.Label(self.master, image=image_pacworms_title, background=self.background_color)
        label_image_title.image = image_pacworms_title

        label_image_logo = tkinter.Label(self.master, image=image_pacworms_logo, background=self.background_color)
        label_image_logo.image = image_pacworms_logo

        #
        #   widget button EDITOR, START, RANDOM, OPTION, QUIT
        #
        button_editor = MyButton(self.master, "EDITOR")
        button_editor.config(command=lambda: self.action_open_window_editor())

        button_start = MyButton(self.master, "START")
        button_start.config(command=lambda: self.action_open_window_game())

        button_random = MyButton(self.master, "RANDOM")
        button_option = MyButton(self.master, "OPTION")
        button_exit = MyButton(self.master, "QUIT")
        button_exit.config(command=lambda: self.action_quit_pacworms())

        #
        #   widget option menu series
        #
        option_menu_level_name = MyOptionMenu(self.master, "SERIES_NAME", self.level_series_name, *self.level_number)

        #
        #   widget scale level number
        #
        scale_level_number = MyScale(self.master, 'horizontal', 1, 16, 1)

        #
        #   placement des widgets -> GRID()
        #
        label_image_title.grid(row=0, column=0, columnspan=2, padx=10, pady=10, sticky="nsw")
        button_editor.grid(row=0, column=2, padx=10, pady=10, sticky="nse")

        label_image_logo.grid(row=1, column=0, columnspan=3)

        button_start.grid(row=2, column=0, columnspan=3)

        option_menu_level_name.grid(row=3, column=0, sticky="nse")
        scale_level_number.grid(row=3, column=1)
        button_random.grid(row=3, column=2, sticky="nsw")

        button_option.grid(row=4, column=0, padx=10, pady=10, sticky="nsw")
        button_exit.grid(row=4, column=2,  padx=10, pady=10, sticky="nse")

    def action_change_series(self):
        """

        :return:
        """

        print(self.level_series_name.get())

    def action_quit_pacworms(self):
        """

        :return:
        """

        result = tkinter.messagebox.askyesno("Confirmation :", "Quitter PACWORMS ?    ")
        if result:
            tkinter.Tk.quit(self.master)

    @staticmethod
    def action_open_window_game():
        """

        :return:
        """

        if VAR.Windows.game is False:
            wgt = WindowGameThread()
            wgt.daemon = True
            wgt.start()

    def action_open_window_editor(self):
        """
        CrĂ©ation d'une fenĂȘtre fille Toplevel()
            -> window_editor
        :return:
        """

        if VAR.Windows.editor is False:
            VAR.Windows.editor = True
            self.window_editor = tkinter.Toplevel(self.master)
            self.window_editor.protocol("WM_DELETE_WINDOW", self.action_close_window_editor)
            StartEdit(self.window_editor)
        else:
            self.window_editor.focus_force()
            self.window_editor.deiconify()

    def action_close_window_editor(self):
        """

        :return:
        """

        VAR.Windows.editor = False
        self.window_editor.destroy()

class WindowGameThread(Thread):

    def __init__(self):
        """
        initialisation
        """

        Thread.__init__(self)

    def run(self):
        """

        :return:
        """

        StartGame()