#! /usr/bin/env python.3.11

import sqlite3, os

script_folder = os.path.dirname(os.path.realpath(__file__))

def erzeuge_tabellen():
    with sqlite3.connect(script_folder + "/startegie.db") as verbindung:
        cursor = verbindung.cursor()

        cursor.execute("DROP TABLE IF EXISTS viren;")
        cursor.execute("DROP TABLE IF EXISTS viren_typ;")
        cursor.execute("DROP TABLE IF EXISTS vorfall;")

        sql =   '''
                    CREATE TABLE viren(
                    name TEXT PRIMARY KEY,
                    typ INTEGER,
                    status TEXT)
                '''
        cursor.execute(sql)

        sql =   '''
                    CREATE TABLE viren_typ(
                    typ INTEGER PRIMARY KEY,
                    groesse INT,
                    signatur TEXT)
                '''
        cursor.execute(sql)

        sql =   '''
                    CREATE TABLE vorfall(
                    name TEXT, 
                    ort TEXT,
                    vorfall TEXT)
                '''
        cursor.execute(sql)

        verbindung.commit()

def schreibe_tabellen():
     with sqlite3.connect(script_folder + "/startegie.db") as verbindung:
        cursor = verbindung.cursor()
        sql =   '''
                    INSERT INTO viren_typ(typ, groesse, signatur)
                    VALUES(1,128,'ABAABA'),(2,256,'ABAABA'),(3,256,'BCCBCB')
                '''
        cursor.execute(sql)

        sql =   '''
                    INSERT INTO viren(name, typ, status)
                    VALUES  ('T800', 1, 'aktiv'),
                            ('T803', 2, 'aktiv'),
                            ('Bit13', 3, 'aktiv'),
                            ('Gorf3', 1, 'aktiv'),
                            ('Gorf7', 2, 'aktiv')
                '''

        cursor.execute(sql)
        verbindung.commit()


def lese_tabellen():
     with sqlite3.connect(script_folder + "/startegie.db") as verbindung:
        cursor = verbindung.cursor()
        sql = '''SELECT * FROM viren_typ;'''
        cursor.execute(sql)
        #for ergebnis in cursor:
        #    print(ergebnis)
        
        return cursor.fetchall()
    
def eingabe():
        with sqlite3.connect(script_folder + "/startegie.db") as verbindung:
                cursor = verbindung.cursor()
                while True:
                        name = input("Name des Virus: ")
                        if not name:
                                break
                        ort = input("Ort: ")
                        vorfall = input("Vorfall: ")
                        sql = """Select * from viren WHERE name = '{name}';""".format(name=name)
                        cursor.execute(sql)
                        if cursor.fetchone():
                                speicher_aktion(name, ort, vorfall)
                        else:
                                print("Virus unbekannt !")
        print("Eingabevorgang wurde beendet.")

def speicher_aktion(bezeichnung, ort, vorfall ):
      with sqlite3.connect(script_folder + "/startegie.db") as verbindung:
            cursor = verbindung.cursor()
            sql = """INSERT INTO vorfall(name, ort, vorfall) 
                      VALUES ( '{bezeichnung}', '{ort}', '{vorfall}' );""".format(bezeichnung=bezeichnung, ort=ort,vorfall=vorfall)
            cursor.execute(sql)

def ausgabe_abfrage(sql_abfrage):
        with sqlite3.connect(script_folder + "/startegie.db") as daten:
                try:
                        zeiger = daten.cursor()
                        zeiger.execute(sql_abfrage)
                        for datensatz in zeiger:
                                for wert in datensatz:
                                        wert = str(wert)
                                        print('| ', wert, " " * (9 - len(wert)), end="")
                                print("|")
                except sqlite3.OperationalError:
                        print("Tabelle nicht gefunden!")
                except:
                        print("Daten konnten nicht bearbeitet werden!")

if __name__ == "__main__":
    #erzeuge_tabellen()
    #schreibe_tabellen()
    eingabe()
    for i in lese_tabellen():
       print(i)
    ausgabe_abfrage(sql_abfrage="""SELECT vorfall.name, viren.typ, vorfall.ort, vorfall.vorfall
                                   FROM vorfall JOIN viren ON viren.name = vorfall.name
                                   WHERE vorfall = 'Störung';""")

