# Interface utilisateur permettant d'entrer, trouver et mettre à jour
# des informations dans la table Client de la base de données Librairie.sq3

# Importation de modules:
import sqlite3
from tkinter import *
from tkinter.messagebox import *        # module permettant de créer des fenetres intempestives


########## Classe de l'application ###########

class Application(Tk):
    "Classe de l'application principale"

    def __init__(self, db):
        "Constructeur de l'objet Application"
        Tk.__init__(self)
        self.title("Gestionnaire de base de données")

        # Boutons d'exécution de requetes:
        self.boutons = PanedWindow(self, orient = HORIZONTAL)
        self.boutons.grid(columnspan = 2)
        self.boutons.add(Button(self, text="Rechercher", command = self.rechercher))
        self.boutons.add(Button(self, text="Ajouter", command = self.ajouter))
        self.boutons.add(Button(self, text="Actualiser", command = self.actualiser))
        self.boutons.add(Button(self, text="Effacer", command = self.detruire))
        self.boutons.add(Button(self, text="Mise à zéro", command = self.vider))
        self.boutons.add(Button(self, text="Aide", command = self.aider))

        # Liste des noms des nomChamps d'un client:
        nomChamps = ['Nom', 'Adresse', 'Ville', 'Canton', 'NoPostal']

        # Dictionnaire reliant chaque nom de champ (clé) à la zone de
        # saisie de texte correspondante (valeur)
        self.champs = {}

        # Création d'une zone de saisie de texte pour chaque champ:
        for i in range(len(nomChamps)):
            # positionner la zone de texte avec son étiquette de texte:
            texte = Label(self, text = nomChamps[i] + ":", font=("Arial", 14))
            texte.grid(row = i+1, column = 0)
            saisie = Entry(self, font = "Courier 12")
            saisie.grid(row = i+1, column = 1, padx=5)

            # associer le nom de chaque champ à sa zone de saisie correspondant:
            self.champs[nomChamps[i]] = saisie

        # Bouton de fermeture:
        Button(self, text="Quitter", command=self.fermer).grid(row=i+2, column = 1, padx=5, sticky=E)

        # Identifiant du client actuellement affiché
        self.ID = ""

        # Ouverture de connexion et définition du curseur
        self.conn = sqlite3.connect(db)             # Connexion à la BD
        self.conn.row_factory = sqlite3.Row         # Retourner les enregistrements sous forme de tableau associatif
        self.cur = self.conn.cursor()               # Initialisation du curseur

    def rechercher(self):
        """Recherche un client selon les critères entrés"""

        return None

        
    def ajouter(self):
        """Ajout d'un client dans la base de données"""

        return None

        
    def actualiser(self):
        """Met à jour un enregistrement"""

        return None

        
    def detruire(self):
        """Détruit un enregistrement"""

        return None


    def vider(self):
        "Vide le contenu de chaque saisie de texte"

        for c in self.champs:
            self.champs[c].delete(0, END)

        self.ID = ""



    def aider(self):
        "Affiche un message d'aide à l'utilisateur"

        showinfo("Aide", """Cliquez sur 'Rechercher' pour trouver un enregistrement.

Cliquez sur 'Ajouter' pour sauvegarder un enregistrement.

Cliquez sur 'Actualiser' pour mettre à jour un enregistrement existant.

Cliquez sur 'Effacer' pour détruire un enregistrement existant.

Cliquez sur 'Mise à zéro' pour vider tous les champs.""")

    def fermer(self):
        "Ferme curseur, connexion et détruit la fenetre"
        self.cur.close()                # Fermeture du curseur
        self.conn.close()               # Fermeture de la connexion
        self.destroy()                  # Destruction de la fenetre

        
########## Programme principal ###########

Application('Librairie.sq3').mainloop()
