import sqlite3
import tkinter as tk
from tkinter import ttk, messagebox

def pridobi_povezavo():
    return sqlite3.connect('motogp.db')

def dodaj_rezultat():
    dirkac_id = vnos_dirkac.get()
    dirkalisce_id = vnos_dirkalisce.get()
    sezona = vnos_sezona.get()
    mesto = vnos_mesto.get()

    if not (dirkac_id and dirkalisce_id and sezona and mesto):
        messagebox.showwarning("Opozorilo", "Vsa polja morajo biti izpolnjena!")
        return

    try:
        conn = pridobi_povezavo()
        cursor = conn.cursor()
        cursor.execute(
            "INSERT INTO dirke (dirkac_id, dirkalisce_id, sezona, mesto) VALUES (?, ?, ?, ?)",
            (dirkac_id, dirkalisce_id, sezona, mesto)
        )
        conn.commit()
        conn.close()
        
        messagebox.showinfo("Uspeh", "Rezultat uspešno dodan v bazo!")
        osvezi_prikaz()
    except Exception as e:
        messagebox.showerror("Napaka", str(e))

def osvezi_prikaz():
    for row in tabela.get_children():
        tabela.delete(row)
        
    conn = pridobi_povezavo()
    cursor = conn.cursor()
    # JOIN poizvedba, ki povezuje tabele dirke, dirkaci in dirkalisca
    query = '''
    SELECT dirkalisca.ime, dirke.sezona, dirke.mesto, dirkaci.ime, dirkaci.priimek, dirkaci.ekipa
    FROM dirke
    JOIN dirkaci ON dirke.dirkac_id = dirkaci.id
    JOIN dirkalisca ON dirke.dirkalisce_id = dirkalisca.id
    ORDER BY dirke.id DESC
    '''
    cursor.execute(query)
    vrstice = cursor.fetchall()
    
    for vrstica in vrstice:
        tabela.insert('', 'end', values=vrstica)
        
    conn.close()

# Glavno okno aplikacije
root = tk.Tk()
root.title("MotoGP Projektna Naloga - Uporabniški vmesnik")
root.geometry("850x550")

# Okvir za vnos podatkov (obrazec)
okvir_vnos = ttk.LabelFrame(root, text=" Vnos novega rezultata ")
okvir_vnos.pack(fill="x", padx=10, pady=10)

ttk.Label(okvir_vnos, text="ID Dirkača (1-22):").grid(row=0, column=0, padx=5, pady=5)
vnos_dirkac = ttk.Entry(okvir_vnos, width=10)
vnos_dirkac.grid(row=0, column=1, padx=5, pady=5)

ttk.Label(okvir_vnos, text="ID Dirkališča (1-16):").grid(row=0, column=2, padx=5, pady=5)
vnos_dirkalisce = ttk.Entry(okvir_vnos, width=10)
vnos_dirkalisce.grid(row=0, column=3, padx=5, pady=5)

ttk.Label(okvir_vnos, text="Sezona:").grid(row=1, column=0, padx=5, pady=5)
vnos_sezona = ttk.Entry(okvir_vnos, width=10)
vnos_sezona.insert(0, "2026")
vnos_sezona.grid(row=1, column=1, padx=5, pady=5)

ttk.Label(okvir_vnos, text="Mesto (ali NC):").grid(row=1, column=2, padx=5, pady=5)
vnos_mesto = ttk.Entry(okvir_vnos, width=10)
vnos_mesto.grid(row=1, column=3, padx=5, pady=5)

gumb_dodaj = ttk.Button(okvir_vnos, text="Shrani v bazo", command=dodaj_rezultat)
gumb_dodaj.grid(row=1, column=4, padx=15, pady=5)

# Okvir za pregled podatkov
okvir_prikaz = ttk.LabelFrame(root, text=" Pregled podatkov (JOIN iz baze) ")
okvir_prikaz.pack(fill="both", expand=True, padx=10, pady=10)

stolpci = ("dirkalisce", "sezona", "mesto", "ime", "priimek", "ekipa")
tabela = ttk.Treeview(okvir_prikaz, columns=stolpci, show="headings")

for col in stolpci:
    tabela.heading(col, text=col.capitalize())
    tabela.column(col, width=130)

tabela.pack(fill="both", expand=True, padx=5, pady=5)

# Inicialni izpis podatkov ob zagonu
osvezi_prikaz()

root.mainloop()
