import tkinter

from tkinter import *
from tkinter import ttk
import brainglobe_atlasapi
import PyNutil
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import askdirectory
from tkinter import colorchooser

from PyNutil import PyNutil

# Basic GUI example
root = Tk()
# root.geometry("300x300")
root.title("PyNutil")
root.wm_iconbitmap("Logo_PyNutil.ico")
# photo = tkinter.PhotoImage(file = 'Logo_PyNutil.ico')
# root.wm_iconphoto(False, photo)

arguments = {
    "reference_atlas": None,
    "registration_json": None,
    "object_colour": None,
    "segmentation_dir": None,
    "output_dir": None,
}

atlas = brainglobe_atlasapi.list_atlases.get_all_atlases_lastversions()

selected_atlas = StringVar(value="Reference Atlas")

directory = ["select", "select1", "select2"]
selected_directory = StringVar(value="directory")

colour = ["colour", "black", "red", "blue", "green"]
selected_colour = StringVar(value=colour[0])


def donothing():
    filewin = Toplevel(root)
    label = Label(filewin, text="Do nothing")
    label.pack()


def about_pynutil():
    filewin = Toplevel(root)
    label = Label(
        filewin,
        text="PyNutil is an application for brain-wide mapping using a reference brain atlas",
    )
    label.pack()


def open_registration_json():
    value = askopenfilename()
    arguments["registration_json"] = value
    print(arguments["registration_json"])


def choose_colour():
    value = colorchooser.askcolor()
    arguments["object_colour"] = value
    print(list(value[0]))


def open_segmentation_dir():
    value = askdirectory()
    arguments["segmentation_dir"] = value
    print(arguments["segmentation_dir"])


def select_output_dir():
    value = askdirectory()
    arguments["output_dir"] = value
    print(arguments["output_dir"])


def start_analysis():
    pnt = PyNutil(
        segmentation_folder=open_segmentation_dir,  #'../tests/test_data/big_caudoputamen_test/',
        alignment_json=open_registration_json,  #'../tests/test_data/big_caudoputamen.json',
        colour=choose_colour,  # [0, 0, 0],
        atlas_name="allen_mouse_25um",
    )

    pnt.get_coordinates(object_cutoff=0)
    pnt.quantify_coordinates()
    pnt.save_analysis("../tests/outputs/test9_PyNutil_bigcaudoputamen_new")


# Creating a menu
root.option_add("*tearOff", FALSE)
# win = Toplevel(root)
# menubar = Menu(win)
menubar = Menu(root)
# win['menu'] = menubar
root.config(menu=menubar)

# menubar = Menu(root)
menu_file = Menu(menubar)
menu_help = Menu(menubar)
menubar.add_cascade(menu=menu_file, label="File")
menubar.add_cascade(menu=menu_help, label="Help")

menu_file.add_command(label="New", command=donothing)
menu_file.add_command(label="Exit", command=root.quit)
menu_help.add_command(label="About PyNutil", command=about_pynutil)

# Creating a content frame"
mainframe = ttk.Frame(root, padding="12 12 12 12")  # left top right bottom
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)  # column to expand if there is extra space
root.rowconfigure(0, weight=1)  # row to expand if there is extra space

# Creating a content frame"
bottomframe = ttk.Frame(root, padding="12 12 12 12")  # left top right bottom
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)  # column to expand if there is extra space
root.rowconfigure(0, weight=1)  # row to expand if there is extra space

# Select reference atlas
ttk.Label(mainframe, text="Select reference atlas:", width=25).grid(
    column=1, row=1, sticky=W
)
ttk.OptionMenu(mainframe, selected_atlas, "Reference Atlas", *atlas).grid(
    column=2, row=1, columnspan=2
)
ttk.Button(mainframe, text="Help", width=8, command="buttonpressed").grid(
    column=4, row=1, sticky=W
)

# Select registration JSON
ttk.Label(mainframe, text="Select registration JSON:", width=25).grid(
    column=1, row=2, sticky=W
)
ttk.Button(mainframe, width=16, text="Browse...", command=open_registration_json).grid(
    column=2, row=2, sticky=W
)
Text(mainframe, height=1, width=40).grid(column=3, row=2, sticky=W)
ttk.Button(mainframe, text="Help", width=8, command="buttonpressed").grid(
    column=4, row=2, sticky=W
)

# Select segmentation folder
ttk.Label(mainframe, text="Select segmentation folder:", width=25).grid(
    column=1, row=3, sticky=W
)
ttk.Button(mainframe, width=16, text="Browse...", command=open_segmentation_dir).grid(
    column=2, row=3, sticky=W
)
Text(mainframe, height=1, width=40).grid(column=3, row=3, sticky=W)
ttk.Button(mainframe, text="Help", width=8, command="buttonpressed").grid(
    column=4, row=3, sticky=W
)

# Select object colour
ttk.Label(mainframe, text="Select object colour:", width=25).grid(
    column=1, row=4, sticky=W
)
ttk.Button(mainframe, width=16, text="Colour", command=choose_colour).grid(
    column=2, row=4, sticky=W
)
Text(mainframe, height=1, width=40).grid(column=3, row=4, sticky=W)
ttk.Button(mainframe, text="Help", width=8, command="buttonpressed").grid(
    column=4, row=4, sticky=W
)

# Select output directory
ttk.Label(mainframe, text="Select output directory:", width=25).grid(
    column=1, row=5, sticky=W
)
ttk.Button(mainframe, width=16, text="Browse...", command=select_output_dir).grid(
    column=2, row=5, sticky=W
)
Text(mainframe, height=1, width=40).grid(column=3, row=5, sticky=W)
ttk.Button(mainframe, text="Help", width=8, command="buttonpressed").grid(
    column=4, row=5, sticky=W
)

# Start analysis
ttk.Label(mainframe, text="Start analysis:", width=25).grid(column=1, row=6, sticky=W)
ttk.Button(mainframe, width=52, text="Run", command="buttonpressed").grid(
    column=3, row=6
)
ttk.Button(mainframe, text="Docs", width=8, command="buttonpressed").grid(
    column=4, row=6, sticky=W
)

# sunken frame around mainframe
"""
mainframe['borderwidth'] = 2
mainframe['relief'] = 'sunken'
"""

# button.configure()

root.mainloop()