import sqlite3

# Poveži se z bazo
conn = sqlite3.connect('knjiznica.db')
cursor = conn.cursor()

# Ustvari tabele (preimenovan stolpec: rok_vracila DATE namesto priča_vracila)
cursor.execute('''
CREATE TABLE IF NOT EXISTS Clani (
    id_clan INTEGER PRIMARY KEY AUTOINCREMENT,
    ime TEXT NOT NULL,
    priimek TEXT NOT NULL,
    email TEXT UNIQUE
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS Knjige (
    id_knjiga INTEGER PRIMARY KEY AUTOINCREMENT,
    naslov TEXT NOT NULL,
    avtor TEXT NOT NULL,
    isbn TEXT UNIQUE,
    status TEXT DEFAULT 'razpoložljiva'
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS Izposoje (
    id_izposoja INTEGER PRIMARY KEY AUTOINCREMENT,
    id_clan INTEGER NOT NULL,
    id_knjiga INTEGER NOT NULL,
    datum_izposoje DATE NOT NULL,
    datum_vracila DATE,
    rok_vracila DATE NOT NULL,
    FOREIGN KEY (id_clan) REFERENCES Clani (id_clan),
    FOREIGN KEY (id_knjiga) REFERENCES Knjige (id_knjiga)
)
''')

# Dodaj podatke (5 članov, 6 knjig, 6 izposoj z mešanico vrnjenih/nevrnjenih – Janez ima zdaj 2)
cursor.execute("INSERT OR IGNORE INTO Clani (ime, priimek, email) VALUES ('Janez', 'Novak', 'janez.novak@email.si')")
cursor.execute("INSERT OR IGNORE INTO Clani (ime, priimek, email) VALUES ('Maja', 'Horvat', 'maja.horvat@email.si')")
cursor.execute("INSERT OR IGNORE INTO Clani (ime, priimek, email) VALUES ('Luka', 'Kovač', 'luka.kovac@email.si')")
cursor.execute("INSERT OR IGNORE INTO Clani (ime, priimek, email) VALUES ('Sara', 'Petrič', 'sara.petric@email.si')")
cursor.execute("INSERT OR IGNORE INTO Clani (ime, priimek, email) VALUES ('Tomaz', 'Zupan', 'tomaz.zupan@email.si')")

cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Python za začetnike', 'John Doe', '978-3-16-148410-0', 'razpoložljiva')")
cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Baze podatkov', 'Ana Kovačič', '978-961-123-456-7', 'razpoložljiva')")
cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Matematika 1', 'Boris Vidmar', '978-961-234-567-8', 'razpoložljiva')")
cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Zgodovina Slovenije', 'Tina Novak', '978-961-345-678-9', 'zasedena')")
cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Fizika za srednjo šolo', 'Marko Bohanec', '978-961-456-789-0', 'zasedena')")
cursor.execute("INSERT OR IGNORE INTO Knjige (naslov, avtor, isbn, status) VALUES ('Literatura 20. stoletja', 'Eva Kranjc', '978-961-567-890-1', 'razpoložljiva')")

# Izposoje z mešanico
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (1, 1, '2025-10-01', '2025-10-15', date('2025-10-01', '+21 days'))")
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (2, 2, '2025-10-10', '2025-11-05', date('2025-10-10', '+21 days'))")
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (3, 3, '2025-10-18', NULL, date('2025-10-18', '+21 days'))")
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (4, 5, '2025-09-25', NULL, date('2025-09-25', '+21 days'))")
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (5, 6, '2025-10-19', NULL, date('2025-10-19', '+21 days'))")
cursor.execute("INSERT OR IGNORE INTO Izposoje (id_clan, id_knjiga, datum_izposoje, datum_vracila, rok_vracila) VALUES (1, 4, '2025-10-05', NULL, date('2025-10-05', '+21 days'))")  # Janezova druga

conn.commit()

# Poizvedba 1: Glavna demonstracija
cursor.execute('''
SELECT DISTINCT
    c.ime || ' ' || c.priimek AS clan,
    k.naslov AS knjiga,
    strftime('%d.%m.%Y', i.datum_izposoje) AS datum_izposoje,
    strftime('%d.%m.%Y', i.rok_vracila) AS rok_vracila,
    strftime('%d.%m.%Y', i.datum_vracila) AS datum_vracila,
    CASE 
        WHEN i.datum_vracila IS NOT NULL THEN
            CASE 
                WHEN i.datum_vracila <= i.rok_vracila THEN 'Vrnjena pravočasno'
                ELSE 'Vrnjena z zamudo (' || CAST((julianday(i.datum_vracila) - julianday(i.rok_vracila)) AS INTEGER) || ' dni)'
            END
        WHEN date('2025-10-20') > i.rok_vracila THEN 'Zamuda (ni vrnjena, ' || CAST((julianday('2025-10-20') - julianday(i.rok_vracila)) AS INTEGER) || ' dni)'
        ELSE 'Še izposojena'
    END AS status_vracila
FROM Izposoje i
JOIN Clani c ON i.id_clan = c.id_clan
JOIN Knjige k ON i.id_knjiga = k.id_knjiga
ORDER BY i.datum_izposoje DESC
''')

print("DEMONSTRACIJA KNJIŽNICE: IZPOSOJE S PREVERJANJEM VRAČILA")
print("{:<20} {:<30} {:<12} {:<12} {:<12} {:<30}".format("Član", "Knjiga", "Izposoja", "Rok", "Dejansko", "Status"))
print("-" * 120)
rezultati = cursor.fetchall()
for row in rezultati:
    dejansko = row[4] if row[4] else 'Ni vrnjena'
    print("{:<20} {:<30} {:<12} {:<12} {:<12} {:<30}".format(row[0], row[1], row[2], row[3], dejansko, row[5]))

# Poizvedba 2: Razpoložljive knjige
cursor.execute('''
SELECT naslov, avtor FROM Knjige WHERE status = 'razpoložljiva'
ORDER BY naslov
''')

print("\nDEMONSTRACIJA KNJIŽNICE: RAZPOLOŽLJIVE KNJIGE")
print("{:<30} {:<20}".format("Naslov", "Avtor"))
print("-" * 50)
for row in cursor.fetchall():
    print("{:<30} {:<20}".format(row[0], row[1]))

# INTERAKTIVNI DEL: Omogoči vnos SQL poizvedbe
print("\n--- INTERAKTIVNA POIZVEDBA ---")
print("Zdaj lahko vnesete SQL poizvedbo. Vpišite 'konec' za izhod.")
while True:
    sql = input("Vnesi SQL: ").strip()
    if sql.lower() == 'konec':
        break
    try:
        cursor.execute(sql)
        rezultati = cursor.fetchall()
        if cursor.description is None:
            print("Ukaze (npr. INSERT, UPDATE) izvedeno – spremembe shranjene. Rezultatov ni za prikaz.")
            conn.commit()  # Shrani, če je bila sprememba
            continue
        stolpci = [desc[0] for desc in cursor.description]
        if not rezultati:
            print("Ni rezultatov.")
            continue
        # Izpiši stolpce (dinamično)
        print("\nRezultat:")
        header = " ".join(f"{col:<15}" for col in stolpci)
        print(header)
        print("-" * len(header))
        for row in rezultati:
            formatted_row = " ".join(f"{str(cell)[:12]:<15}" for cell in row)  # Skrajšaj za lepši izpis
            print(formatted_row)
    except sqlite3.Error as e:
        print(f"Napaka v SQL: {e}. Poskusite znova.")

conn.close()
