from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtWidgets
import os
from PyQt5 import QtPrintSupport

from menu import instructormenu
from ManagementUIs import TestDeployment
from ManagementUIs import StudentOverview
from generate import Generate
from questionBank import qbConstructor
from grade import Grade
from admin import Admin
from file import instructorhistory
from take import Take
from file import test
from file import instructorfiles
from pref import runPref

import Sidebar

class CreateInstructorHistory(QWidget):
    def __init__(self):
        super(CreateInstructorHistory, self).__init__()

        # Set up the user interface from Designer.
        self.ui = instructorhistory.Ui_Dialog()
        self.ui.setupUi(self)

    def sizeHint(self):
        return QtCore.QSize( 500, 475 )

class CreateSidebar(QDockWidget):
    def __init__(self):
        super(CreateSidebar, self).__init__()

        # Set up the user interface from Designer.
        self.ui = Sidebar.Ui_DockWidget()
        self.ui.setupUi(self)
        self.ui.treeWidget.doubleClicked.connect(self.openTestDeployment)
        self.ui.treeWidget_2.doubleClicked.connect(self.openStudentManager)

    def openTestDeployment(self):
        item = self.ui.treeWidget.currentItem()

        if item != self.ui.treeWidget.topLevelItem(0):
            self.testDeployment = QtWidgets.QDialog()
            self.ui3 = TestDeployment.Ui_Dialog()
            self.ui3.setupUi(self.testDeployment)
            self.testDeployment.show()

    def openStudentManager(self):
        self.studentOverview = QtWidgets.QDialog()
        ui2 = StudentOverview.Ui_Dialog()
        ui2.setupUi(self.studentOverview)
        ui2.label.setText(self.ui.treeWidget_2.currentItem().text(0))
        self.studentOverview.show()

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.generateDialog = Generate.SimpleGenerator()
        self.advancedDialog = Generate.AdvancedGenerator()
        self.questionBank = qbConstructor.QuestionBankWindow()
        self.grading = Grade.MainGradingWindow()
        self.users = Admin.ManageUsersWindow()
        self.viewTests = Take.ViewTests()
        self.pref = runPref.PreferenceWindow()

        # Set up the user interface from Designer.
        self.ui = instructormenu.Ui_MainWindow()
        self.ui.setupUi(self)

        sideBar = CreateSidebar()
        history = CreateInstructorHistory()
        history.ui.tableWidget.sizeHint()

        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, sideBar)

        self.resize(1000,650)

        vlayout = QVBoxLayout(self.centralWidget())
        vlayout.setAlignment(QtCore.Qt.AlignTop)
        history.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

        vlayout.addWidget(history)

        self.centralWidget().setLayout(vlayout)

        #some random resizing
        #self.ui.topLayout.setSpacing(5)
        #self.testWidget.ui.treeWidget.setMaximumWidth(400)
        # to add a widget to the main screen,
        # do something like this:
        #self.ui.topLayout.addWidget(self.testWidget.ui.treeWidget)
        #self.ui.topLayout.addWidget(QPushButton('button2'))
        #or self.ui.bottomLayout
        #self.ui.bottomLayout.addWidget(QPushButton('button'))
        #self.ui.bottomLayout.addWidget(QComboBox())

        self.ui.actionSimple_Generate.triggered.connect(self.generateDialog.show)
        self.ui.actionAdvanced_Generate.triggered.connect(self.advancedDialog.show)
        self.ui.actionQuestion_Bank.triggered.connect(self.questionBank.show)
        self.ui.actionGrade.triggered.connect(self.grading.show)
        self.ui.actionUsers.triggered.connect(self.users.show)
        self.ui.actionView_All.triggered.connect(self.viewTests.show)
        self.ui.actionOpen.triggered.connect(self.open)
        self.ui.actionSave.triggered.connect(self.save)
        self.ui.actionSave_All_2.triggered.connect(self.save)
        self.ui.actionSaveAll.triggered.connect(self.save)
        self.ui.actionExport_As.triggered.connect(self.export)
        self.ui.actionPrint.triggered.connect(self.print)
        self.ui.actionPreferences.triggered.connect(self.pref.show)


    def open(self):
        fileName = QFileDialog.getOpenFileName(self, 'Open file', os.getenv('HOME'))
        file = open(fileName, 'r')
        filedata = file.read()
        self.text.setText(filedata)
        file.close()

    def save(self):
        fileName = QFileDialog.getSaveFileName(self, 'Save file', os.getenv('HOME'))
        file = open(fileName, 'r')
        filedata = file.read()
        self.text.setText(filedata)
        file.close()

    def export(self):
        fileName = QFileDialog.getSaveFileName(self, 'Export As...', os.getenv('HOME'))
        file = open(fileName, 'r')
        filedata = file.read()
        self.text.setText(filedata)
        file.close()

    def print(self):
        printDialog = QtPrintSupport.QPrintDialog()
        printDialog.exec()