import os
import sys
import tkinter as tk


from tklib.tkutils import print_data, pint, pfloat, index2val, pconv_by_type
from tklib.tkparams import tkParams
from tklib.tkgui.tksimple_gui import get_window_from_plt, CustomDialog_with_config

import vasp_defect


def scale_dH_EF_dialog(parent, app, vars):
    config = tkParams()
    config.widgets = [
            [{"type": "label", "label": "EF:", "width": None}, {"type": "entry","varname": "EF_min", "width": 15},
             {"type": "label", "label": "-",   "width": None}, {"type": "entry","varname": "EF_max", "width": 15},
             {"type": "label", "label": "eV  ",  "width": None}
            ],
            [{"type": "label", "label": "dH:", "width": None}, {"type": "entry","varname": "dH_min", "width": 15},
             {"type": "label", "label": "-",   "width": None}, {"type": "entry","varname": "dH_max", "width": 15},
             {"type": "label", "label": "eV  ",  "width": None}
            ]
            ]

    CustomDialog_with_config(parent, title = "Scale for dH - EF plot", config = config, vars = vars)
#            root.mainloop()

    if config.ret:
       print(f"EF range: {vars.EF_min} - {vars.EF_max}")
       print(f"dH range: {vars.dH_min} - {vars.dH_max}")
       vars.scale_callback(vars.dH_axis, vars.EF_min, vars.EF_max, vars.dH_min, vars.dH_max)
    else:
       print("Cancelled")

# 指定したlabelのメニュー項目のindexを取得
def find_menu_item_by_label(menu, label):
        count = menu.index("end") + 1
        for index in range(count):
            if menu.entrycget(index, "label") == label:
                return index
        return None

def toggle_menu_item(menu, label1, label2):
        index = find_menu_item_by_label(menu, label1)
        if index is not None:
            menu.entryconfig(index, label = label2)
            return label1
        else:
            index = find_menu_item_by_label(menu, label2)
            if index is not None:
                menu.entryconfig(index, label = label1)
            return label2

def menu_start_annotate(menu, label1, label2, plot_event):
        prev_label = toggle_menu_item(menu, label1, label2)
        if prev_label == label1:
            plot_event.annotation.activate(True)
        else:
            plot_event.annotation.activate(False)

def menu_start_follow_mouse(menu, label1, label2, plot_event):
        prev_label = toggle_menu_item(menu, label1, label2)
        if prev_label == label1:
            plot_event.follow_mouse.activate(True)
        else:
            plot_event.follow_mouse.activate(False)

def menu_start_move_text(menu, label1, label2, plot_event):
        prev_label = toggle_menu_item(menu, label1, label2)
        if prev_label == label1:
            plot_event.move_text.activate(True)
        else:
            plot_event.move_text.activate(False)

def select_mode(mode, vars):
        vars.selector0.set_mode(mode)
        vars.selector1.set_mode(mode)
        if mode == '':
            print(f"選択モードを off に設定しました")
        else:
            print(f"選択モードを {mode} に設定しました")

def add_popup_menu(popup_menu, app = None, vars = None, parent = None, **kwargs):
    popup_menu.add_command(label="*NOT WORKING* scale for dH - EF plot", command = lambda: scale_dH_EF_dialog(parent, app, vars))
    popup_menu.add_command(label="Start annotate",  
                command = lambda: menu_start_annotate(vars.plot_event.popup_menu.menu, "Start annotate", "Stop annotate", vars.plot_event))
    popup_menu.add_command(label="Start move text",
                command = lambda: menu_start_move_text(vars.plot_event.popup_menu.menu, "Start move text", "Stop move text", vars.plot_event))
    popup_menu.add_command(label="Start follow mouse",
                command = lambda: menu_start_follow_mouse(vars.plot_event.popup_menu.menu, "Start follow mouse", "Stop follow mouse", vars.plot_event))

    submenu = tk.Menu(popup_menu, tearoff = 0)
    submenu.add_command(label = "x",    command = lambda: select_mode('x', vars))
    submenu.add_command(label = "y",    command = lambda: select_mode('y', vars))
    submenu.add_command(label = "xy",   command = lambda: select_mode('xy', vars))
    submenu.add_command(label = "stop", command = lambda: select_mode('', vars))
    popup_menu.add_cascade(label = "range select mode", menu = submenu)
