"""
    Module Controleur de gestion de parking
"""

from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QTableWidgetItem
from src.m.Parking import TypePlace, Parking
from src.v.MyQt import MyQWidget
from src.v.Ui_Admin import Ui_CreaParking

#Controleur de creation de parking
class CreaParking:
    ## Constructeur
    # @param main Controleur parent
    def __init__(self, main):
        self._main = main
        self._main.activity("Debut Creation Parking", self._main.lvl.INFO)

        self._w = MyQWidget(self._main)
        self._ui = Ui_CreaParking()
        self._ui.setupUi(self._w)

        # connect
        self._ui.btn_addRow.clicked.connect(self.addRow)
        self._ui.btn_rmRow.clicked.connect(self.rmRow)
        self._ui.btn_valider.clicked.connect(self.valider)
        self._ui.btn_annuler.clicked.connect(self.annuler)

        # Validator
        self._ui.lineEdit_nom.setValidator(
            QtGui.QRegExpValidator(QtCore.QRegExp('^([0-9a-zA-Z\'àâéèêôùûçñãõÀÂÉÈÔÙÛÑÃÕÇ\s-]{2,30})$')))

        self._ui.tableWidget.insertRow(self._ui.tableWidget.rowCount())
        self.showWindow()

    ## Ajoute une ligne de creation de place
    def addRow(self):
        self._ui.tableWidget.insertRow(self._ui.tableWidget.rowCount())

    ## Enleve une ligne de creation de place
    def rmRow(self):
        self._ui.tableWidget.removeRow(self._ui.tableWidget.rowCount() - 1)

    ## Gestion annulation creation parking
    def annuler(self):
        result = QtGui.QMessageBox.question(self._w,
                                            "Confirmer Fermeture...",
                                            "Etes vous sur de vouloir abandonner ?\n"
                                            "(Toute modification non enregistrée seras perdu)",
                                            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)

        if result == QtGui.QMessageBox.Yes:
            self._main.activity("Annulation Creation Parking", self._main.lvl.INFO)
            self._w.hide()
            self._main.showWindow()

    ## Gestion validation de formulaire de creation de Parking
    def valider(self):
        if self._ui.lineEdit_nom.text() == "":
            self._main.activity("Erreur lors de la creations du Parking. Nom Invalide.\n", self._main.lvl.FAIL)
            self.error("Nom Invalide!")
        else:
            try:
                l = []
                for i in range(0, self._ui.tableWidget.rowCount()):
                    l.append(TypePlace(None, int(self._ui.tableWidget.item(i, 0).text()),
                                       int(self._ui.tableWidget.item(i, 1).text()),
                                       int(self._ui.tableWidget.item(i, 2).text()),
                                       float(self._ui.tableWidget.item(i, 4).text()),
                                       int(self._ui.tableWidget.item(i, 3).text())))
                p = Parking(None, self._ui.lineEdit_nom.text(), l)
                self._main.activity("Ajout:" + str(p), self._main.lvl.INFO)
                self._w.hide()
                self._main.showWindow()
            except Exception as e:
                self._main.activity("Erreur lors de la creations du Parking \n" + str(e), self._main.lvl.FAIL)
                self.error("Verifiez que votre saisie est valide !")

    ## Gestion affichage CreaParking
    def showWindow(self):
        self._w.show()

    ## Gestion affichage QDialog d'erreur
    # @param msg le message d'erreur
    def error(self, msg):
        QtGui.QMessageBox.warning(self._w,
                                  "Erreur ...",
                                  "Erreur lors de la création du parking ...\n" +
                                  msg
        )

## Controleur d'affichage des details des places d'un parking existant
class DetailsPlaces(CreaParking):
    ## Contructeur
    # @param main Controleur parent
    # @param parking praking dont on veux afficher le détail
    def __init__(self, main, parking):
        self.__parking = parking
        super(DetailsPlaces, self).__init__(main)

        self._ui.lineEdit_nom.setText(parking.nom)
        for p in parking.listeTypePlace :
            row = self._ui.tableWidget.rowCount() - 1
            if row != 0:
                self._ui.tableWidget.insertRow(row)
            self._ui.tableWidget.setItem(row, 0, QTableWidgetItem(str(p.hauteur)))
            self._ui.tableWidget.setItem(row, 1, QTableWidgetItem(str(p.longueur)))
            self._ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(p.nombre)))
            self._ui.tableWidget.setItem(row, 3, QTableWidgetItem(str(p.niveau)))
            self._ui.tableWidget.setItem(row, 4, QTableWidgetItem(str(p.prix)))

        self._ui.lineEdit_nom.setDisabled(True)
        self._ui.tableWidget.setDisabled(True)
        self._ui.btn_annuler.setVisible(False)
        self._ui.btn_addRow.setVisible(False)
        self._ui.btn_rmRow.setVisible(False)

    ## Gestion de retour sur le fenetre principal
    def valider(self):
        self._w.hide()
        self._main.showWindow()