from PyQt5.uic import loadUi
from PyQt5.QtWidgets import *
from pickle import load, dump
from numpy import *

# ======================================================
# Fonction fournie : Vérifie si un nombre romain est valide
# ======================================================
def Valider(ch):

    r = "IVXLCDM"

    if ch == "":
        return False

    else:
        test = True
        i = 0

        while (i < len(ch)) and (r.find(ch[i]) != -1) and test:

            if ch.find(ch[i] + ch[i] + ch[i] + ch[i]) != -1:
                test = False

            else:
                i = i + 1

        return i == len(ch)


# ======================================================
# Module : RomainToDecimal
# Convertit un nombre romain en décimal
# ======================================================
def RomainToDecimal():

    qtt = w.QR.text()

    # Vérification de la validité
    if not Valider(qtt):
        QMessageBox.critical(w, "Erreur", "Nombre Romain invalide")

    else:

        res = 0

        chars = "IVXLCDM"
        values = array([1, 5, 10, 50, 100, 500, 1000])

        # Conversion
        for i in range(len(qtt) - 1):

            if values[chars.find(qtt[i])] >= values[chars.find(qtt[i + 1])]:
                res += values[chars.find(qtt[i])]

            else:
                res -= values[chars.find(qtt[i])]

        # Ajout de la dernière valeur
        res += values[chars.find(qtt[-1])]

        # Affichage du résultat
        w.QD.setText(str(res))


# ======================================================
# Module : Ajouter
# Ajoute un nouvel objet dans Objets.dat
# ======================================================
def Ajouter():

    nom = w.Objet.text()
    qd = w.QD.text()
    qr = w.QR.text()

    # Vérification du nom
    if nom == "":
        QMessageBox.critical(w, "Erreur", "veuillez saisir le nom de l'ojet")

    # Vérification de la conversion
    elif qd == "":
        QMessageBox.critical(w, "Erreur", "veuillez convertir la quantité romaine en decimal")

    else:

        # Création de l'enregistrement
        enr = {
            'Objet': nom,
            'QR': qr,
            'QD': qd
        }

        # Ajout dans le fichier
        f = open("Objets.dat", "ab")
        dump(enr, f)
        f.close()

        QMessageBox.critical(w, "Erreur", "Objet ajouté avec succes")


# ======================================================
# Exploitation de l'interface graphique
# ======================================================
app = QApplication([])

w = loadUi("InterfAjout.ui")

w.show()

# Bouton Convertir
w.btConvertir.clicked.connect(RomainToDecimal)

# Bouton Ajouter
w.ajouter.clicked.connect(Ajouter)

app.exec_()