from main import *
from tkinter import *
from tkinter import messagebox
import mysql.connector
    
class Mysql:
    # On initialise une première fenêtre d'identification et de mot de passe
    def __init__(self, root):
        self.root = root
        self.root.title("Launcher OBS Extension Multistreaming")
        self.root.geometry("400x300")
        self.root.grid_rowconfigure(0, weight=1)
        self.root.grid_rowconfigure(1, weight=1)
        self.root.grid_rowconfigure(2, weight=1)
        self.root.grid_rowconfigure(3, weight=1)
        self.root.grid_columnconfigure(0, weight=1)
        self.root.grid_columnconfigure(1, weight=0)
        self.root.grid_columnconfigure(2, weight=0)
        self.root.grid_columnconfigure(3, weight=0)

    # On vérifie sur le serveur si l'identification correspond à des utilisateurs sur le serveur
    def authenticate_user(self, username, password):
        try:
            # Paramètres du serveur
            cnx = mysql.connector.connect(user='root', password='',
                                          host='127.0.0.1',
                                          database='obs_project')
            cur = cnx.cursor()

            # On lance une requête pour vérifier si le lastname et le service correspond à la base de donnée
            query = "SELECT * FROM utilisateurs WHERE username = %s  AND password = %s"
            cur.execute(query, (username, password))

            # Renvoie la première ligne de la base de donnée qui correspond
            user = cur.fetchone()

            # Si c'est le cas, on affiche le message suivant et on ouvre une nouvelle fenêtre
            if user:
                messagebox.showinfo("Validé", "Authentification réussi")
                self.ouvrir_nouvelle_fenetre(username, password)

            # Sinon on affiche un message d'erreur
            else:
                messagebox.showerror("Erreur", "Authentification erroné")

        # Message si une erreur innatendue
        except mysql.connector.Error as err:
            messagebox.showerror("Erreur", f"Erreur: {err}")

        # On ferme le tout, la connexion etc...
        finally:
            cur.close()
            cnx.close()

    # On va initialiser une nouvelle fenêtre après la connexion tout en fermant la première
    def ouvrir_nouvelle_fenetre(self, username, password):
        if self.root.winfo_exists():  # Vérifie si la fenêtre principale existe toujours
            self.root.withdraw()  # Fermer la fenêtre actuelle
        NouvelleFenetre(self.root, username, password) # Création de la nouvelle fenêtre avec toutes les infos, utilitées etc...
        
            
    # Lorsqu'on clique sur la case identifiant, le texte se supprime pour pouvoir taper le sien
    def click_identifiant(self, event):
        entry_identifiant.configure(state=NORMAL)
        entry_identifiant.delete(0, END)
        entry_identifiant.unbind('<Button-1>', self.click_identifiant)

    # Lorsqu'on clique sur la case password, le texte se supprime pour pouvoir taper le sien
    def click_pass(self, event):
        entry_pass.configure(state=NORMAL)
        entry_pass.delete(0, END)
        entry_pass.unbind('<Button-1>', self.click_pass)

    # On test voir si le username et le password que l'on récupére, correspond pour s'identifier
    def msg_call_back(self):
        username = entry_identifiant.get()
        password = entry_pass.get()
        self.authenticate_user(username, password)

# Creation de la fenetre principale
fenetre = Tk()
obj = Mysql(fenetre)

# Ajout des boutons sur la fenêtre
label = Label(fenetre, text="Connexion")
label.grid(row = 0, column= 0)

# Entrée du champs identifiant
entry_identifiant = Entry(fenetre)
entry_identifiant.grid(row = 1, column=0)
entry_identifiant.focus()
entry_identifiant.insert(0, "Admin")

entry_identifiant.bind('<Button-1>', obj.click_identifiant)

# Entrée du champs password
entry_pass = Entry(fenetre, show='*')
entry_pass.grid(row = 2, column=0)
entry_pass.insert(0, "Admin")

entry_pass.bind('<Button-1>', obj.click_pass)

# Bouton de connexion avec la fonction msg_call_back
boutonconnexion = Button(fenetre, text="Connexion", command=obj.msg_call_back, activebackground = "green")
boutonconnexion.grid(row = 3, column = 0)

# Lancer l'application
fenetre.mainloop()