import logging
import tkinter as tk
from tkinter import ttk

from . import builders
from .data import _configuration
from .gainlayer import SubMixFrame

logger = logging.getLogger(__name__)


class Navigation(ttk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.parent = parent
        self.logger = logger.getChild(self.__class__.__name__)
        self.grid(row=0, column=3, padx=(0, 2), pady=(5, 5), sticky=(tk.W, tk.E))
        if not _configuration.navigation_show:
            self.grid_remove()
        self.styletable = self.parent.styletable

        self.builder = builders.NavigationFrameBuilder(self)
        self.builder.setup()
        self.builder.create_submix_button()
        self.builder.create_channel_button()
        self.builder.create_extend_button()
        self.builder.create_info_button()
        self.builder.grid_configure()

        self.mainframebuilder = builders.MainFrameBuilder(self.parent)

    def show_submix(self):
        if self.submix.get():
            self.parent.submix_frame = SubMixFrame(self.parent)
            self.logger.info(
                f"Finished building submixframe for submix {_configuration.submixes}"
            )
        else:
            if _configuration.extends_horizontal:
                self.parent.submix_frame.teardown()
                if self.parent.bus_frame:
                    self.parent.bus_frame.grid()
                else:
                    self.parent.columnconfigure(1, weight=0)
            else:
                self.parent.submix_frame.teardown()
                if self.parent.bus_frame:
                    self.parent.bus_frame.grid()
                else:
                    self.parent.rowconfigure(2, weight=0, minsize=0)
            self.logger.info(
                f"Finished tearing down submixframe for submix {_configuration.submixes}"
            )

        if not _configuration.themes_enabled:
            self.styletable.configure(
                f"Submix.TButton",
                background=f'{"purple" if self.submix.get() else "white"}',
            )

    def switch_channel(self):
        if self.channel_text.get() == "STRIP":
            self.mainframebuilder.create_channelframe("bus")
            self.parent.strip_frame.teardown()
        else:
            self.mainframebuilder.create_channelframe("strip")
            self.parent.bus_frame.teardown()

        self.extend_button["state"] = (
            "disabled" if self.channel_text.get() == "STRIP" else "normal"
        )
        [frame.teardown() for frame in self.parent.configframes]
        self.channel_text.set("BUS" if self.channel_text.get() == "STRIP" else "STRIP")

    def extend_frame(self):
        _configuration.extended = self.extend.get()
        if self.extend.get():
            self.channel_button["state"] = "disabled"
            self.mainframebuilder.create_channelframe("bus")
        else:
            [
                frame.teardown()
                for frame in self.parent.configframes
                if "!busconfig" in str(frame)
            ]
            self.parent.bus_frame.teardown()
            self.parent.bus_frame = None
            self.channel_button["state"] = "normal"

            if self.parent.submix_frame:
                self.parent.submix_frame.teardown()
                self.submix.set(False)
                if not _configuration.themes_enabled:
                    self.styletable.configure(
                        f"Submix.TButton",
                        background=f'{"purple" if self.submix.get() else "white"}',
                    )

        self.extend_text.set("REDUCE" if self.extend.get() else "EXTEND")
