# Python imports
from random import randint


# Lib imports


# Application imports
from .tabs.tab import Tab


class Window:
    def __init__(self):
        self._id_length: int  = 10
        self._id: str         = ""
        self._name: str       = ""
        self._nickname:str    = ""
        self._isHidden: bool  = False
        self._active_tab: int = 0
        self._tabs: list      = []

        self._generate_id()
        self._set_name()


    def create_tab(self) -> Tab:
        tab = Tab()
        self._tabs.append(tab)
        return tab

    def pop_tab(self) -> None:
        self._tabs.pop()

    def delete_tab_by_id(self, tid: str):
        for tab in self._tabs:
            if tab.get_id() == tid:
                self._tabs.remove(tab)
                break


    def get_tab_by_id(self, tid: str) -> Tab:
        for tab in self._tabs:
            if tab.get_id() == tid:
                return tab

    def get_tab_by_index(self, index) -> Tab:
        return self._tabs[index]

    def get_tabs_count(self) -> int:
        return len(self._tabs)

    def get_all_tabs(self) -> list:
        return self._tabs

    def get_id(self) -> str:
        return self._id

    def get_name(self) -> str:
        return self._name

    def get_nickname(self) -> str:
        return self._nickname

    def is_hidden(self) -> bool:
        return self._isHidden

    def list_files_from_tabs(self) -> None:
        for tab in self._tabs:
            print(tab.get_files())

    def set_active_tab(self, index: int):
        self._active_tab = index

    def get_active_tab(self) -> Tab:
        return self._tabs[self._active_tab]

    def set_nickname(self, nickname):
        self._nickname = f"{nickname}"

    def set_is_hidden(self, state):
        self._isHidden = f"{state}"

    def _set_name(self):
        self._name = "window_" + self.get_id()


    def _random_with_N_digits(self, n):
        range_start = 10**(n-1)
        range_end = (10**n)-1
        return randint(range_start, range_end)

    def _generate_id(self):
        self._id = str(self._random_with_N_digits(self._id_length))
