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(
                '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(
                        'Submix.TButton',
                        background=f'{"purple" if self.submix.get() else "white"}',
                    )

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