# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'TebNo.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from PyQt5.QtWidgets import QTableWidgetItem, QMessageBox
from PatientModel import PatientModel
from AllVisits import AllVisitsModel
from pathlib import Path
import os
from unidecode import unidecode
import resources
from database import Patient, Visit, PatientOperations, VisitOperations
from PatientScreenApp import PatientWindow
from TimerBox import TimerMessageBox
from Charts import VisitsChart, PatientsChart, VisitPriority
from OSHandling import OSHandling

class Ui_TebNoContainer(object):
    
    def setupUi(self, TebNoContainer):
        QtGui.QFontDatabase.addApplicationFont(':/fonts/Vazirmatn-Bold.ttf')
        TebNoContainer.setObjectName("TebNoContainer")
        TebNoContainer.resize(700, 680)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(TebNoContainer.sizePolicy().hasHeightForWidth())
        TebNoContainer.setSizePolicy(sizePolicy)
        TebNoContainer.setMinimumSize(QtCore.QSize(700, 680))
        TebNoContainer.setMaximumSize(QtCore.QSize(700, 680))
        TebNoContainer.setGeometry(QtCore.QRect(200, 30, 0, 0))
        #Style Path
        with open(OSHandling.styleHandling(), 'r') as f:
            TebNoContainer.setStyleSheet(f.read())
        self.maintab = QtWidgets.QTabWidget(TebNoContainer)
        self.maintab.setGeometry(QtCore.QRect(40, 0, 650, 650))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.maintab.sizePolicy().hasHeightForWidth())
        self.maintab.setSizePolicy(sizePolicy)
        self.maintab.setMinimumSize(QtCore.QSize(650, 650))
        self.maintab.setMaximumSize(QtCore.QSize(650, 650))
        self.maintab.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.maintab.setIconSize(QtCore.QSize(32, 32))
        self.maintab.setObjectName("maintab")
        self.newPatient = QtWidgets.QWidget()
        self.newPatient.setObjectName("newPatient")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.newPatient)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.name = QtWidgets.QLabel(self.newPatient)
        self.name.setObjectName("name")
        self.verticalLayout_2.addWidget(self.name)
        self.fname = QtWidgets.QLineEdit(self.newPatient)
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)
        self.fname.setFont(font)
        self.fname.setLocale(QtCore.QLocale(QtCore.QLocale.Persian, QtCore.QLocale.Iran))
        self.fname.setEchoMode(QtWidgets.QLineEdit.Normal)
        self.fname.setObjectName("fname")
        self.verticalLayout_2.addWidget(self.fname)
        self.lastname = QtWidgets.QLabel(self.newPatient)
        self.lastname.setObjectName("lastname")
        self.verticalLayout_2.addWidget(self.lastname)
        self.lname = QtWidgets.QLineEdit(self.newPatient)
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)
        self.lname.setFont(font)
        self.lname.setLocale(QtCore.QLocale(QtCore.QLocale.Persian, QtCore.QLocale.Iran))
        self.lname.setObjectName("lname")
        self.verticalLayout_2.addWidget(self.lname)
        self.birth = QtWidgets.QLabel(self.newPatient)
        self.birth.setObjectName("birth")
        self.verticalLayout_2.addWidget(self.birth)
        self.birthDate = QtWidgets.QLineEdit(self.newPatient)
        self.birthDate.setEchoMode(QtWidgets.QLineEdit.Normal)
        self.birthDate.setCursorPosition(10)
        self.birthDate.setObjectName("birthDate")
        self.verticalLayout_2.addWidget(self.birthDate)
        self.nCode = QtWidgets.QLabel(self.newPatient)
        self.nCode.setObjectName("nCode")
        self.verticalLayout_2.addWidget(self.nCode)
        self.nationalCode = QtWidgets.QLineEdit(self.newPatient)
        self.nationalCode.setText("")
        self.nationalCode.setEchoMode(QtWidgets.QLineEdit.Normal)
        # self.nationalCode.setCursorPosition(0)
        # self.nationalCode.installEventFilter(self)
        self.nationalCode.setObjectName("nationalCode")
        self.verticalLayout_2.addWidget(self.nationalCode)
        self.phone = QtWidgets.QLabel(self.newPatient)
        self.phone.setObjectName("phone")
        self.verticalLayout_2.addWidget(self.phone)
        self.phoneNumber = QtWidgets.QLineEdit(self.newPatient)
        self.phoneNumber.setEchoMode(QtWidgets.QLineEdit.Normal)
        # self.phoneNumber.setCursorPosition(0)
        # self.phoneNumber.installEventFilter(self)
        self.phoneNumber.setObjectName("phoneNumber")
        self.verticalLayout_2.addWidget(self.phoneNumber)
        self.submitBtn = QtWidgets.QPushButton(self.newPatient)
        self.submitBtn.setObjectName("submitBtn")
        self.verticalLayout_2.addWidget(self.submitBtn)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/images/person.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.maintab.addTab(self.newPatient, icon, "")
        self.viewPatients = QtWidgets.QWidget()
        self.verticalLayoutWidget = QtWidgets.QWidget(self.viewPatients)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(60, 20, 511, 441))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.patientListsLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.patientListsLayout.setContentsMargins(0, 0, 0, 0)
        self.patientListsLayout.setObjectName("patientListsLayout")
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)
        self.patientsList = QtWidgets.QTableView()
        self.patientsList.setFont(font)
        self.patient_model = PatientModel(self, ['نام','نام خانوادگی', 'کد ملی', 'شماره همراه'])
        self.patientsList.setModel(self.patient_model)
        self.patientsList.doubleClicked.connect(self.patientsShow)
        self.patientListsLayout.addWidget(self.patientsList)

        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/images/patients.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.maintab.addTab(self.viewPatients, icon1, "")
       
        # visits list here
        self.viewVisits = QtWidgets.QWidget()
        self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.viewVisits)
        self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(60, 20, 511, 441))
        self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
        self.visitListsLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
        self.visitListsLayout.setContentsMargins(0, 0, 0, 0)
        self.visitListsLayout.setObjectName("visitListsLayout")
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)
        self.visitsList = QtWidgets.QTableView()
        self.visitsList.setFont(font)
        self.visit_model = AllVisitsModel(self, ['نام خانوادگی', 'کد ملی','تاریخ', 'ساعت', 'وضعیت'])
        self.visitsList.setModel(self.visit_model)
        self.visitListsLayout.addWidget(self.visitsList)

        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/images/visits.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.maintab.addTab(self.viewVisits, icon1, "")

        #statistics plots
        self.viewPlots = QtWidgets.QWidget()
        self.plotsLayout = QtWidgets.QVBoxLayout(self.viewPlots)
        self.visitPlot = QtWidgets.QPushButton(self.viewPlots)
        self.visitPlot.setObjectName("visitPlot")
        self.plotsLayout.addWidget(self.visitPlot)
        self.patientPlot = QtWidgets.QPushButton(self.viewPlots)
        self.patientPlot.setObjectName("patientPlot")
        self.plotsLayout.addWidget(self.patientPlot)
        self.visitChartPlot = QtWidgets.QPushButton(self.viewPlots)
        self.visitChartPlot.setObjectName("visitChartPlot")
        self.plotsLayout.addWidget(self.visitChartPlot)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/images/statistics.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.maintab.addTab(self.viewPlots, icon1, "")

        self.visitPlot.clicked.connect(self.visit_statistics)
        self.patientPlot.clicked.connect(self.patient_statistics)
        self.visitChartPlot.clicked.connect(self.visits_charts)
        self.submitBtn.clicked.connect(self.save_patient)
        self.retranslateUi(TebNoContainer)
        self.maintab.setCurrentIndex(0)
        #Patients Information Screen
        # self.patientScreen = PatientWindow(self.visitsList)
        # self.patientScreen.closed.connect(self.show)

        QtCore.QMetaObject.connectSlotsByName(TebNoContainer)

    def retranslateUi(self, TebNoContainer):
        _translate = QtCore.QCoreApplication.translate
        TebNoContainer.setWindowTitle(_translate("TebNoContainer", "Form"))
        self.name.setText(_translate("TebNoContainer", "نام:"))
        self.lastname.setText(_translate("TebNoContainer", "نام خانودگی:"))
        self.birth.setText(_translate("TebNoContainer", "سال تولد:"))
        self.birthDate.setInputMask(_translate("TebNoContainer", "1999/99/99"))
        self.birthDate.setText(_translate("TebNoContainer", "1//"))
        self.nCode.setText(_translate("TebNoContainer", "کد ملی:"))
        self.nationalCode.setInputMask(_translate("TebNoContainer", "9999999999"))
        self.phone.setText(_translate("TebNoContainer", "شماره همراه:"))
        self.phoneNumber.setInputMask(_translate("TebNoContainer", "99999999999"))
        self.submitBtn.setText(_translate("TebNoContainer", "ذخیره اطلاعات"))
        self.visitPlot.setText(_translate("TebNoContainer", "آمار نوبت‌ها"))
        self.patientPlot.setText(_translate("TebNoContainer", "آمار بیماران"))
        self.visitChartPlot.setText(_translate("TebNoContainer", "نمودار نوبت‌ها"))
        self.maintab.setTabText(self.maintab.indexOf(self.newPatient), _translate("TebNoContainer", "بیمار جدید"))
        self.maintab.setTabText(self.maintab.indexOf(self.viewPatients), _translate("TebNoContainer", "مشاهده بیماران"))
        self.maintab.setTabText(self.maintab.indexOf(self.viewVisits), _translate("TebNoContainer", "نوبت‌ها"))
        self.maintab.setTabText(self.maintab.indexOf(self.viewPlots), _translate("TebNoContainer", "آمارها"))
    
    def save_patient(self):
        args = {
            'name': self.fname.text(),
            'lastname': self.lname.text(),
            'birth_date': unidecode(self.birthDate.text()),
            'phoneNumber': unidecode(self.phoneNumber.text()),
            'nationalCode': unidecode(self.nationalCode.text())
        }

        message = PatientOperations.addPatient(**args)
        if message == "بیمار با مشخصات مورد نظر ثبت شد.":
            self.clear_save_patient_inputs()
            patient_model = PatientModel(self, ['نام','نام خانوادگی', 'کد ملی', 'شماره همراه'])
            self.patientsList.setModel(patient_model)
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)
        messagebox = TimerMessageBox(4, message, font)
        messagebox.exec_()
    
    def clear_save_patient_inputs(self):
        self.fname.setText('')
        self.lname.setText('')
        self.birthDate.setText('')
        self.phoneNumber.setText('')
        self.nationalCode.setText('')
    
    def patientsShow(self):
        nationalCode = ""
        indexes = self.patientsList.selectionModel().selectedIndexes()
        for index in indexes:
            nationalCode = index.child(index.row(), 2).data()
        
        self.patientScreen = PatientWindow(self.visitsList, nationalCode, self.patientsList)
        self.patientScreen.setScreen()
        self.patientScreen.closed.connect(self.show)
        self.hide()
        self.patientScreen.show()
    
    def visit_statistics(self):

        visits = VisitOperations.show_visits_monthly_2()
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)

        if (visits is not None):
            self.visitsChart = VisitsChart(visits)
            self.visitsChart.closed.connect(self.show)
            self.hide()
            self.visitsChart.show()  
        else:
            messagebox = TimerMessageBox(4, "نوبتی وجود ندارد.", font)
            messagebox.exec_()

    
    def patient_statistics(self):

        ages = PatientOperations().show_patients_ages()
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)

        if (ages is not None):
            self.patientsChart = PatientsChart(ages)
            self.patientsChart.closed.connect(self.show)
            self.hide()
            self.patientsChart.show() 
        else:
            messagebox = TimerMessageBox(4, "بیماری وجود ندارد.", font)
            messagebox.exec_()
    
    def visits_charts(self):

        results = VisitOperations.show_visits_chart()
        font = QtGui.QFont()
        font.setFamily("Vazirmatn")
        font.setPointSize(10)

        if(results is not None):
            self.visitPriority = VisitPriority(results)
            self.visitPriority.closed.connect(self.show)
            self.hide()
            self.visitPriority.show() 
        else:
            messagebox = TimerMessageBox(4, "نوبتی در بازه زمانی مورد نظر وجود ندارد.", font)
            messagebox.exec_()