#!/usr/bin/python3
import subprocess
import sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QTabWidget, QVBoxLayout, QStatusBar, QMenu, QAction

from mos_attestat_print_modules.attestat_attachment import AttestatAttachment
from mos_attestat_print_modules.attestat_face import AttestatFace
from mos_attestat_print_modules.attestat_marks import AttestatMarks
from mos_attestat_print_modules.config import version
from mos_attestat_print_modules.design import WindowForIssuingBook
from mos_attestat_print_modules.fis_frdo import create_fis_frdo_workbook
from mos_attestat_print_modules.settings_window import SettingsWindow
from mos_attestat_print_modules.system_functions import create_sizes_files, alert


class App(QMainWindow):
    def __init__(self):
        super().__init__()
        # create_folders()
        create_sizes_files()
        self.initUI()

    def open_settings(self):
        self.settings_window = SettingsWindow()

    def show_templates(self):
        try:
            subprocess.run(f'dolphin /usr/share/mos-attestat-print/templates >/dev/null 2>&1 & ', shell=True)
        except Exception as e:
            alert(f'Не удалось открыть папку с шаблонами. Исключение: {e}')

    def generate_issue_book(self):
        self.window_for_issuing = WindowForIssuingBook()

    def initUI(self):
        self.title = f'МОС печать аттестатов версия {version}'
        self.setWindowTitle(self.title)
        self.statusBar = QStatusBar()
        self.setStatusBar(self.statusBar)
        self.statusBar.showMessage("Выберите действие")
        self.tab_widget = MyTabWidget(self, self.statusBar)
        self.setCentralWidget(self.tab_widget)
        self.setMinimumWidth(600)
        self.setMinimumHeight(300)

        self.tab_widget.statusBar = self.statusBar

        menubar = self.menuBar()
        menu = QMenu('Файл', self)
        settings_action = QAction("Настройки", self)
        show_templates_action = QAction("Показать шаблоны", self)
        issue_book_action = QAction("Сформировать книгу выдачи", self)
        fis_frdo_action = QAction("Сформировать выгрузку в ФИС ФРДО", self)
        exit_action = QAction("Выход", self)
        settings_action.triggered.connect(self.open_settings)
        show_templates_action.triggered.connect(self.show_templates)
        issue_book_action.triggered.connect(self.generate_issue_book)
        fis_frdo_action.triggered.connect(create_fis_frdo_workbook)
        exit_action.triggered.connect(lambda: self.close())
        menu.addAction(settings_action)
        menu.addAction(show_templates_action)
        menu.addAction(issue_book_action)
        menu.addAction(fis_frdo_action)
        menu.addAction(exit_action)
        menubar.addMenu(menu)
        self.setWindowIcon(QIcon.fromTheme('mos-attestat-print'))
        self.show()


class MyTabWidget(QWidget):
    def __init__(self, parent, statusBar):
        super(QWidget, self).__init__(parent)
        # Имя текущего файла общее для всех трёх вкладок
        self.excel_file_with_students = None
        self.students = None
        self.statusBar = statusBar
        self.initUI()

    def update_students_index_on_all_tabs(self):
        for tab in (
            self.tab1, self.tab2, self.tab3
        ):
            tab.switch_current_student()

    def initUI(self):
        self.layout = QVBoxLayout(self)
        self.tabs = QTabWidget()
        self.tab1 = AttestatFace(self.statusBar)
        # для изменения общих параметров, таких как имя файла с оценками
        self.tab1.parent = self
        self.tab2 = AttestatAttachment(self.statusBar)
        self.tab2.parent = self
        self.tab3 = AttestatMarks(self.statusBar)
        self.tab3.parent = self
        self.tabs.resize(300, 200)
        self.tabs.currentChanged.connect(lambda: self.statusBar.showMessage('Выберите действие'))
        self.tabs.currentChanged.connect(self.update_students_index_on_all_tabs)

        # Add tabs
        self.tabs.addTab(self.tab1, "Основной аттестат")
        self.tabs.addTab(self.tab2, "Приложение - информация")
        self.tabs.addTab(self.tab3, "Приложение - оценки")
        self.layout.addWidget(self.tabs)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

# TODO программа должна уметь писать слово ДУБЛИКАТ (по положению)
# TODO сделать экспорт книги выдачи с выбором начала нумерации
