# Python imports

# Lib imports

# Application imports




# TODO: Should rewrite to try and support more windows more naturally
class PaneMixin:
    """docstring for PaneMixin"""

    def toggle_pane(self, child):
        if child.is_visible():
            child.hide()
        else:
            child.show()

    def run_flag_toggle(self, pane_index):
        tggl_button = self.builder.get_object(f"tggl_notebook_{pane_index}")
        if pane_index == 1:
            self.is_pane1_hidden = not self.is_pane1_hidden
            tggl_button.set_active(not self.is_pane1_hidden)
            return self.is_pane1_hidden
        elif pane_index == 2:
            self.is_pane2_hidden = not self.is_pane2_hidden
            tggl_button.set_active(not self.is_pane2_hidden)
            return self.is_pane2_hidden
        elif pane_index == 3:
            self.is_pane3_hidden = not self.is_pane3_hidden
            tggl_button.set_active(not self.is_pane3_hidden)
            return self.is_pane3_hidden
        elif pane_index == 4:
            self.is_pane4_hidden = not self.is_pane4_hidden
            tggl_button.set_active(not self.is_pane4_hidden)
            return self.is_pane4_hidden

    def toggle_notebook_pane(self, widget, eve=None):
        name        = widget.get_name()
        pane_index  = int(name[-1])
        pane        = None

        master_pane = self.builder.get_object("pane_master")
        pane        = self.builder.get_object("pane_top") if pane_index in [1, 2] else self.builder.get_object("pane_bottom")

        state = self.run_flag_toggle(pane_index)
        if self.is_pane1_hidden and self.is_pane2_hidden and self.is_pane3_hidden and self.is_pane4_hidden:
            state = self.run_flag_toggle(pane_index)
            self._save_state(state, pane_index)
            return

        child = None
        if pane_index in [1, 3]:
            child = pane.get_child1()
        elif pane_index in [2, 4]:
            child = pane.get_child2()

        self.toggle_pane(child)
        self._save_state(state, pane_index)

    def _save_state(self, state, pane_index):
        window = self.window_controller.get_window_by_index(pane_index - 1)
        window.isHidden = state
        self.window_controller.save_state()
