from typing import Dict
from typing import List


def element_keys() -> Dict[str, List[str]]:
    """Keep track and return the element keys that need bindings to them in the GUI"""

    button_keys = ["__Browser_Browse__", "__Browser_Set__", "__Browser_Reset__",

                   "__REC_Image_Dir_Browse__", "__REC_Set_Img_Dir__", "__REC_Reset_Img_Dir__",
                   "__REC_Save_TIE__", "__REC_Run_TIE__",
                   "__REC_Erase_Mask__", "__REC_Mask__", "__REC_Arrow_Set__",
                   "__REC_Load_FLS2__", "__REC_Load_FLS1__", "__REC_Reset_FLS__", "__REC_Load_Stack__",
                   "__REC_Set_FLS__"
                   ]
    checkbox_keys = ["__REC_Symmetrize__"]
    combo_keys = ["__REC_Def_Combo__", "__REC_FLS_Combo__", "__REC_TFS_Combo__",
                  "__REC_Derivative__", "__REC_Colorwheel__", "__REC_Arrow_Color__"]
    graph_keys = ["__REC_Graph__", "__REC_Colorwheel_Graph__",
                  "__invisible_graph__"]
    input_keys = ["__Browser_Path__",

                  "__REC_Image_Dir_Path__", "__REC_Image__", "__REC_QC_Input__",
                  "__REC_transform_y__", "__REC_transform_x__",
                  "__REC_transform_rot__", "__REC_Mask_Size__", "__REC_Arrow_Num__",
                  "__REC_Arrow_Len__", "__REC_Arrow_Wid__",
                  "__REC_FLS1__", "__REC_FLS2__", "__REC_Stack__", "__REC_Stack_Stage__",
                  "__REC_FLS1_Staging__", "__REC_FLS2_Staging__", "__REC_M_Volt__"
                  ]
    listbox_keys = ["__REC_Image_List__", "__REC_Def_List__"]
    radio_keys = ["__REC_Square_Region__", "__REC_Rectangle_Region__"
                  ]
    slider_keys = ["__REC_Slider__", "__REC_Image_Slider__", "__REC_Defocus_Slider__"]
    tab_keys = ["reconstruct_tab", "home_tab"]
    tabgroup_keys = ["pages_tabgroup"]
    text_keys = ["home_title", "home_version", "home_authors", "home_readme", "home_contact"
                 ,
                 '__REC_FLS2_Text__', '__REC_FLS2_Text__', '__REC_Mask_Text__']
    read_only_inputs_keys = ["__REC_Image__"
                             ]
    keys = {'button': button_keys,
            'checkbox': checkbox_keys,
            'combo': combo_keys,
            'graph': graph_keys,
            'input': input_keys,
            'read_only_inputs': read_only_inputs_keys,
            'listbox': listbox_keys,
            'radio': radio_keys,
            'slider': slider_keys,
            'tab': tab_keys,
            'tabgroup': tabgroup_keys,
            'text': text_keys}

    return keys