from PyQt5 import QtWidgets as Qt
from PyQt5.QtCore import pyqtSlot

from controllers.distribution_overview_controller import DistributionOverview
from controllers.distribution_setup_controller import DistributionSetup
from controllers.group_edit_controller import GroupEdit
from controllers.groups_overview_controller import GroupsOverview
from globals import Global
from windows import mainwindow


class MainWindow(Qt.QMainWindow, mainwindow.Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.btnBack.clicked.connect(self.goBack)
        self.goToGroupsOverview()
        #self.goToDistributionOverview()
        self._last_changed = 0

    def _goToWidget(self, widget):
        self.stackedWidget.addWidget(widget)
        self.stackedWidget.setCurrentWidget(widget)

    def dataChanged(self):
        """
        all controllers have to call this when they change data in db
        it prompts every controller before current widget in stack to reload data when getting back to view
        """
        self._last_changed = self.stackedWidget.currentIndex()

    def goToGroupsOverview(self):
        self._goToWidget(GroupsOverview(self))

    @pyqtSlot()
    def goToGroupEdit(self, group=None):
        """
        change active window to GroupEdit()
        :param group: if unfilled (or None), create new group
        """
        if group is None:
            self._last_changed = self.stackedWidget.currentIndex() + 1
            group = Global.db.createNewGroup()
        self._goToWidget(GroupEdit(self, group))

    def goToDistributionSetup(self, group):
        """
        change active window to DistributionSetup()
        :param group: 
        """
        self._goToWidget(DistributionSetup(self, group))

    def goToDistributionOverview(self):
        group = Global.db.getGroupByName("StarĂ¡ skupina :)")
        members = group.members
        teams = {
                "team 1": [members[0], members[1]],
                "team 2": [members[2], members[3], members[4]],
                "team 3": [],
                "team 4": [members[5]],
                "team 5": [members[6], members[7]],
                 }
        self._goToWidget(DistributionOverview(self, teams))

    def goBack(self):
        current_index = self.stackedWidget.currentIndex()
        if current_index <= 0:
            # we're on groups overview (do nothing)
            return
        if current_index <= self._last_changed:
            self.stackedWidget.widget(current_index - 1).reloadData()
            self._last_changed -= 1
        self.stackedWidget.removeWidget(self.stackedWidget.currentWidget())
        self.stackedWidget.setCurrentIndex(current_index - 1)