import time
import random
global stepscount
stepscount = 0
inventory = []
done = []
visited = []
global goahead
goahead = 0




def cover():
    print(""" 
 
 
 
 
 
 
 
 
 
 
 
 
 ______   ______   ______   ______   _______  _______              _____  
(  ___ \ / ___  \ / ___  \ / ___  \ (       )(  ___  )|\     /|   / ___ \ 
| (   ) )\/   )  )\/   \  \\/   )  )| () () || (   ) |( \   / )  ( (___) )
| (__/ /     /  /    ___) /    /  / | || || || (___) | \ (_) /    \     / 
|  __ (     /  /    (___ (    /  /  | |(_)| ||  ___  |  ) _ (     / ___ \ 
| (  \ \   /  /         ) \  /  /   | |   | || (   ) | / ( ) \   ( (   ) )
| )___) ) /  /    /\___/  / /  /    | )   ( || )   ( |( /   \ )  ( (___) )
|/ \___/  \_/     \______/  \_/     |/     \||/     \||/     \|   \_____/ 
                                                                          
 _______  _______  _______  _______                                       
(  ____ \(  ____ )(  ___  )(  ____ \|\     /|                             
| (    \/| (    )|| (   ) || (    \/| )   ( |                             
| |      | (____)|| (___) || (_____ | (___) |                             
| |      |     __)|  ___  |(_____  )|  ___  |                             
| |      | (\ (   | (   ) |      ) || (   ) |                             
| (____/\| ) \ \__| )   ( |/\____) || )   ( |                             
(_______/|/   \__/|/     \|\_______)|/     \|                             
                                                                          





""")
    time.sleep(2)
    print("""
DIES BASIERT AUF EINER WAHREN TATSACHE. DIE SPIELELEMENTE SIND VEREINFACHT UND TEILS
UNREALISTISCH DARGESTELLT. WICHTIGE DETAILS WERDEN ZUR EINFACHEREN VERSTÄNDLICHKEIT
WEGGELASSEN. DER ERMITTLUNGSPROZESS IST IN WIRKLICHKEIT EINE UNGEHEURLICH SCHWIERIGE
AUFGABE UND WIRD HIER AUF EIN MÖGLICHST ÜBERSCHAUBARES MASS GEKÜRZT.

""")
    time.sleep(5)
    go = 0
    while go == 0:
        a = userinput("Tippe folgendes ein, wenn du bereit bist: ok | ")
        if a == "ok":
            go = 1
        else:
            print("wrong, retry")
    global start
    start = time.time()
    


def gameoverpossible():
    global start
    if "grounding" not in done:
        current = time.time() - start
        if current < 120:
            gameover1()
        elif current < 180 and current > 119:
            gameover2()
        elif current < 240 and current > 179:
            gameover3()
        elif current < 300 and current > 239:
            gameover()
    else:
        current = time.time()
        
def gameover1():
    if random.randint(0,10) == 1:
        gameover()
    else:
        current = time.time()
        
def gameover2():
    if random.randint(0,6) == 1:
        gameover()
    else:
        current = time.time()

def gameover3():
    if random.randint(0,3) == 1:
        gameover()
    else:
        current = time.time()

def gameover():
    global next
    next = 0
    global exit
    exit = 0
    print("""
                                                                NEW YORK TIMES

                             DIE KATASTROPHE
                    ---------------------------------
Heute morgen gegen 7 Uhr ist eine Boeing 737 MAX 8 der United Airlines abgestürzt.
Alle 178 Menschen an Bord der Maschine sind bei dem fast senkrechten Absturz der
Maschine gestorben. Der Unfall ähnelt den beiden bisherigen Abstürzen von 737 MAX
in Ethiopien und Indonesien in vielerlei Hinsicht. Auch hier war die Maschine
senkrecht abgestürzt, auch hier wollten die Piloten umkehren und meldeten Probleme
mit der Flugsteuerung. Die Ermittler dieses Falles werden sich morgen früh für ihre
langsame Arbeit für den Tod der 178 Menschen verantworten, da sie kein Weltweites
Flugverbot für die 737 MAX ausgesprochen hatte. 
                    ---------------------------------
                    
Oh weh.
Das wird einige Konsequenzen für dich nach sich ziehen.
""")
    time.sleep(4)
    print("""


Es ist der nächste Morgen. Du machst dich auf zum Gericht.
Die Richter entziehen den Fall deiner Verantwortung und verurteilen dich zu
lebenslänglicher Haft, aufgrund von fahrlässiger Tötung. Das ist das Ende deiner
Karriere.
""")
    
    print("Punktezahl: 0")

        
        
def einfuehrung():
    print("""Es ist Samstagmorgen... Urplötzlich stürzt eine fast brandneue Boeing 737MAX
von Ethiopian Airlines ab. Die Welt ist schockiert, da dies bereits der zweite Absturz dieses
Typs ist. Beides Mal waren fast brandneue Flugzeuge involviert. Beide Abstürze ähnelten sich
massiv. Deine Aufgabe ist es nun, die Absturze zu klären.""")
    print("""
Als neu ernannter Ermittler musst du dir bereits jetzt eine wichtige Frage stellen:
Solltest du ein weltweites Flugverbot für diesen Flugzeugtypen verhängen?
Sowohl Boeing als auch die Fluggesellschaften werden sich dagegen sträuben.
""")
    i = userinput("Willst du das Flugverbot verhängen? (y/n)")
    if i == "y":
        print("""
                                                                NEW YORK TIMES
            
            NTSB ERMITTLER VERHÄNGT FLUGVERBOT FÜR UNGLÜCKSFLIEGER
        --------------------------------------------------------------
Heute Morgen hat ein Sprecher des NTSB (National Transport and Safety Board verkündet,
dass der leitende Ermittler ein Flugverbot für alle Flugzeuge der Boeing 737MAX-Klasse
zu verhängen. Dies ist auf massive Proteste seitens der Fluggesellschaften und von Boeing
gestossen. Jedoch: Viele Aviatikexperten befürworten den Entscheid des Ermittlers. Die
Sicherheit der Passagiere muss um jeden Preis gewährleistet werden. Die einzige Möglichkeit
dies zu gewährleisten ist, ein Flugverbot auszusprechen. 
""")
        done.append("grounding")
    elif i == "n":
        print("""
Die Wirtschaft ist wichtig, ein Pilotenfehler kann ja nicht ausgeschlossen werden.
Ermitteln wir!

""")
    else:
        print("wrong, retry")
        einfuehrung()
    time.sleep(4)

def grundriss():
    if "grounding" in done:
        print("""

_________________________________________________________________________________________________________

Willkommen im Ermittlerbüro.
Dies ist dein Arbeitsplatz an der Unfallstelle. Die Welt will Antworten und Boeing
braucht sie, um das Flugzeug zu verbessern. Der Zeitdruck ist aber geringer, da keine
weiteren Abstürze geschehen können. 
Hier kannst du alle Gegenstände, welche du auf der Unfallstelle finden kannst
untersuchen, um die mögliche Unfallursache herauszufinden. 
""")
    else:
        print("""

_________________________________________________________________________________________________________

Willkommen im Ermittlerbüro.
Dies ist dein Arbeitsplatz an der Unfallstelle. Du solltest dich so schnell wie
möglich um diesen Fall kümmern, denn sonst könnte es zu weiteren Abstürzen kommen.
Hier kannst du alle Gegenstände, welche du auf der Unfallstelle finden kannst
untersuchen, um die mögliche Unfallursache herauszufinden. 
""")
        
    
def abspann():
    print("""
    
DU HAST ES GESCHAFFT!
    GLÜCKWUNSCH!
    
    """)
    global start
    global stepscount
    times = time.time() - start
    points = times*2 + stepscount**2 - 110
    if points < 0:
        print("Deine Zeit: ",times)
        print("\n\nDeine Punkte (Je geringer desto besser): 0")
        print("\nDeine Anzahl Schritte (Je geringer desto besser):", stepscount)
    else:
        print("Deine Zeit: ",times)
        print("\n\nDeine Punkte (Je geringer desto besser): ",points)
        print("\nDeine Anzahl Schritte (Je geringer desto besser):", stepscount)
    bewertung(points)

def bewertung(punkte):
    print("""
                        DEINE BEWERTUNG:""")
    if punkte <= 0:
        print("""                                 GOD """)
    if punkte < 20:
        print("""                                 A+ """)
    elif punkte < 40:
        print("""                                 A """)
    elif punkte < 100:
        print("""                                 B """)
    elif punkte < 200:
        print("""                                 C """)
    elif punkte < 301:
        print("""                                 D """)
    elif punkte > 300:
        print("""                                 D- """)
    

def userinput(question):
    return input(question).lower()

def makedone(item):
    inventory.remove(item)
    done.append(item)
    
def eb():
    global stepscount
    stepscount += 1
    print("""Du befindest dich jetzt im Ermittlerbüro. 
""")
    while len(inventory) > 0:
        stepscount += 1
        if "blackbox" in inventory:
            makedone("blackbox")
            print("""Da du ja jetzt die Blackbox des Flugzeugs gefunden hast,
kannst du sie hier im Ermittlerbüro aufmachen und die Flugdaten auslesen.
Dies dauert jedoch eine gewisse Zeit. Du öffnest ihn und hoffst, dass einer
deiner Spezialisten die Daten retten kann.""")
            time.sleep(7)
            print("""Dein Spezialist hat es geschafft! Die Daten konten wiederhergestellt werden!
Du siehst eine Auffälligkeit in den Daten der Flughöhe und der vertikalen Geschwindigkeit.
Dies deutet auf massive technische Probleme hin. Auch die Daten des Anstellwinkelsensors 1,
sind auffällig: Er hatte die ganze Zeit denselben Anstellwinkel angezeigt.
""")
            if "anstellwinkelsensor" in inventory:
                print("""Glücklicherweise hast du ihn bereits auf dem Trümmerfeld entdeckt.
Du untersuchst ihn nun.""")
            elif "anstellwinkelsensor" in done:
                print("""Du hast ihn ja bereits untersucht. """)
            else:
                print("""Du solltest dich vielleicht nach dem Sensor umsehen.""")
        elif "anstellwinkelsensor" in inventory:
            makedone("anstellwinkelsensor")
            print("""Da du ja zuvor den Anstellwinkelsensor des Flugzeugs gefunden hast,
kannst du ihn jetzt auf Schäden überprüfen. Du untersuchst die Ströme, welche der
Sensor bei Bewegung ausgibst und machst eine Entdeckung:
ER FUNKTIONIERT NICHT!
Logischerweise könnte er auch durch den Aufprall beschädigt sein, """)
            if "blackbox" in done:
                print("""aber die Blackbox bestätigt ja den Ausfall des Sensors.
Du bist der Ursache auf der Spur. Glückwunsch!""")
                global goahead
                goahead = 1
                inventory.clear()
            else:
                print("""du solltest deshalb die Blackbox finden, um den Ausfall zu
bestätigen.
""")
            print("\n")
        elif "turbine" in inventory:
            print("""Du hast eine der beiden Turbinen in das Büro transportieren lassen.
Als mögliche Absturzursache hast du Triebwerksversagen im Verdacht. Beim Betrachten
der Triebwerke erkennst du aber an der Verformung der Schaufeln und dem Dreck
in der Turbine selbst, also im Kompressor, dass sie voll funktionstüchtig war.
Somit kann ein Absturz durch Triebwerksversagen ausgeschlossen werden.
Denn ein modernes Flugzeug kann auch mit nur einem Triebwerk problemlos fliegen.""")
            makedone("turbine")
        elif "zeugen" in inventory:
            makedone("zeugen")
            print("""Du hast ja auch bereits die Zeugen befragt. Du schaust dir deine
Notizen lange an, kannst aber nichts erkennen, was dir für den Fall helfen könnte.
Du verwirfst die Aussagen als nicht aussagekräftig.""")
        time.sleep(5)
    if goahead == 1:
        stepscount += 1
        print("""Du wendest dich nun den Pilotenakten zu. Der Kapitän hatte beachtliche
8000 Flugstunden und soweit du erkennen magst, auch keine bekannten Probleme. Auch die
(kurze) Karriere des Copiloten war makellos, er hatte jedoch nur 200 Flugstunden.
Die Piloten hatten beim Kontakt mit dem Tower Probleme gemeldet und zur Umkehr
gebeten. Dies bestätigte auch der Stimmenrekorder. Deine Aufmerksamkeit fällt auf
das als Manouvering Caracteristics Augumentation System, oder kurz MCAS, welches eigentlich
einen Strömungsabriss verhindern sollte, aber, aufgrund der Architektur der 737-Familie,
nur mit einem der redundanten Anstellwinkelsensoren verbunden war. Des weiteren:
Zwei Sensoren sind einer zu wenig, denn falls jetzt einer ausfallen sollte, welcher
sollte verwendet werden? Das MCAS hatte hier schlicht weg keine Chance, vernüftig
zu handeln und hatte das Flugzeug in einen Sturzflug gezwungen, da der Anstellwinkelsensor
einen zu hohen Anstellwinkel gemeldet hatte. Das Flugzeug war jedoch gar nicht in jener Lage und
die Piloten kämpften vergeblich gegen das System, welches sich nicht abschalten liess.
Denn durch die grösseren und Effizienteren Triebwerke (LEAP 1A) der 737MAX, mussten diese
weiter vorne und höher unter dem Flügel angebracht werden, um genügend Bodenfreiheit zu
gewährleisten. Dies hatte dazu geführt, dass bei dem schon sehr alten Flugzeug das sogenannte
Pitch-Up moment grösser wurde und somit die Nase des Flugzeugs in gewissen Fluglagen
unkontrolliert nach oben gehen kann. Das MCAS sollte dies verhindern, denn diese Fluglage
führt unweigerlich zu einem Strömungsabriss, bei welchem das Flugzeug sogesagt "vom Himmel
fallen würde".""")
        time.sleep(10)
        if "grounding" in done:
            stepscount -= 2
            print("""
Nachdem du ja glücklicherweise bereits bei Ermittlungsbeginn das Grounding des Typs andgeordnet hattest.
Die Fluggesellschaften und Boeing hatten zwar nicht sehr positiv darauf reagiert, aber mit dem was
du herausgefunden hattest, sind jetzt alle froh, dass du es getan hattest. 
Die 737 MAX war anschliessend bis im Dezember 2020 gegroundet und Boeing fuhr durch dieses Problem
massive Verluste ein.
""")
        else:
            stepscount += 10
            print("""
Alle sind schockiert, dass du nicht bereits bei Ermittlungsbeginn ein Grounding angeordnet hattest.
Boeing und auch die Fluggesellschaften fanden es zwar erst besser, aber auch sie sind jetzt der Meinung,
dass es besser gewesen wäre, wenn du bereits da ein Grounding angeordnet hättest. Deine Haltung davon ist
zwar verständlich, aber du wirst trotzdem zur Verantwortung gezogen. Du musst eine Haftstrafe von einem
Jahr absitzen, da du viele Personen in Gefahr gebracht hast. Trotzdem, der Fall ist geklärt. 
""")
        return 0
    else:
        print("""Um etwas untersuchen zu können, musst du erst etwas in dein Inventar nehmen,
dann hier zurückkehren. Gehe dazu hinaus auf die Unfallstelle.
Auch da könnten sich wichtige Hinweise verstecken.""")
        i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Heck (h) oder willst du Zeugen befragen (z)? ")
        if i == "c":
            return 4
        if i == "f":
            return 2
        if i == "h":
            return 3
        if i == "z":
            return 5
        
    

def fl():
    global stepscount
    stepscount += 1
    if "flügel" in visited:
        print("""Du hast den Flügel bereits untersucht.""")
        i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h), zum Büro (b) oder willst du Zeugen befragen (z)? ")
        if i == "c":
            return 4
        if i == "b":
            return 1
        if i == "h":
            return 3
        if i == "z":
            return 5
        else:
            print("wrong, retry")
            return 2
    else: 
        print("""
Der Flügel. Komplett zertrümmert. Er scheint in einem beinahe 90° Winkel
aufgeschlagen zu sein. Du und dein Team finden eine der beiden Turbinen. Du lässt
sie in dein Büro transportieren, um sie dort zu untersuchen. Du kannst entweder
in dein Büro gehen oder weitersuchen.""")
        i = userinput("Willst du zurück? (y/n)")
        visited.append("flügel")
        time.sleep(2)
        if i == 'y':
            return 1
        elif i == 'n':
            print("""Du willst also weitersuchen.""")
            i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h) oder willst du Zeugen befragen (z)? ")
            if i == "c":
                return 4
            if i == "h":
                return 3
            if i == "z":
                return 5
            else:
                print("wrong, retry")
                return 2
            
   

def hk():
    global stepscount
    stepscount += 1
    if "heck" in visited:
        print("""Du hast das Heck bereits untersucht.""")
        i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Büro (b) oder willst du Zeugen befragen (z)? ")
        if i == "c":
            return 4
        if i == "b":
            return 1
        if i == "f":
            return 2
        if i == "z":
            return 5
        else:
            print("wrong, retry")
            return 3
    else:
        print("""
Du entdeckst etwas, das wie das Seitenleitwerks des Flugzeugs aussehen könnte.
Dein grösstes Ziel ist, die Blackbox zu finden. Du hebst Teile an, und plötzlich siehst du sie:
Die Blackbox. Du hebst sie auf und lässt sie in dein Büro bringen. """)
        inventory.append("blackbox")
        time.sleep(1)
        visited.append("heck")
        i = userinput("Willst du zurück? (y/n)")
        if i == 'y':
            return 1
        elif i == 'n':
            print("""Du willst also weitersuchen.""")
            i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (h) oder willst du Zeugen befragen (z)? ")
            if i == "c":
                return 4
            if i == "f":
                return 2
            if i == "z":
                return 5
            else:
                print("wrong, retry")
                return 3
            
    
    
def zg():
    global stepscount
    stepscount += 1
    if "zeugen" in visited:
        print("""Du hast die Zeugen bereits befragt.""")
        i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Büro (b) oder zum Heck (h)? ")
        if i == "c":
            return 4
        if i == "b":
            return 1
        if i == "f":
            return 2
        if i == "h":
            return 3
        else:
            print("wrong, retry")
            return 5
    else:
        print("""
Du machst dich auf den Weg in ein nahegelegenes Dorf, da du gehört hast, dass eine Person
den Absturz gesehen hat.
 - Hallo. Sie haben den Absturz mitverfolgt?
 - Ja habe ich.
 - Wollen sie uns etwas darüber erzählen?
 - Ja klar. Also. Ich war gerade auf dem Weg nach Hause, als ich ein Flugzeug hörte. Es war lauter
 als sonst, deshalb schaute ich auf. Etwas schien ganz und gar nicht gut, denn plötzlich kippte
 es zur Seite weg und stürzte vom Himmel. Einfach so. Eine riesige Explosion erschütterte unser Dorf.
  - Vielen Dank. Sie haben mir geholfen.
  
  Du machst dich auf den Weg zurück zur Unfallstelle. Willst du dir direkt Gedanken über die
  Aussagen machen? Dafür musst du ins Büro zurück. """)
        inventory.append("zeugen")
        time.sleep(1)
        visited.append("zeugen")
        i = userinput("Willst du zurück? (y/n)")
        if i == 'y':
            return 1
        elif i == 'n':
            print("""Du willst also weitersuchen.""")
            i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h) oder zum Flügel (f)? ")
            if i == "c":
                return 4
            if i == "h":
                return 3
            if i == "f":
                return 2
            else:
                print("wrong, retry")
                return 5
            
    

def co():
    global stepscount
    stepscount += 1
    if "cockpit" in visited:
        print("""Du hast das Cockpit bereits untersucht.""")
        i = userinput("Wo willst du hin? Zum Heck (h), zum Flügel (f), zum Büro (b) oder willst du Zeugen befragen (z)? ")
        if i == "h":
            return 3
        if i == "b":
            return 1
        if i == "f":
            return 2
        if i == "z":
            return 5
        else:
            print("wrong, retry")
            return 4
    else:
        print("""
Du näherst dich der Nase des Flugzeugs. Vorsichtig läufst du umher. Vor dir liegt ein Sensor.
Er scheint defekt zu sein. Du hebst ihn auf und lässt ihn in dein Büro bringen.
Du kannst zurück gehen und ihn untersuchen oder weitersuchen.""")
        inventory.append("anstellwinkelsensor")
        time.sleep(1)
        visited.append("cockpit")
        i = userinput("Willst du zurück? (y/n)")
        if i == 'y':
            return 1
        elif i == 'n':
            print("""Du willst also weitersuchen.""")
            i = userinput("Wo willst du hin? Zum Flügel (f), zum Heck (h) oder willst du Zeugen befragen (z)? ")
            if i == "f":
                return 2
            if i == "h":
                return 3
            if i == "z":
                return 5
            else:
                print("wrong, retry")
                return 4
            
    


def main():
    cover()
    einfuehrung()
    grundriss()
    global next
    global exit
    next = 1
    exit = 0
    while next != 0:
        if next == 1:
            next = eb()
        elif next == 2:
            next = fl()
        elif next == 3:
            next = hk()
        elif next == 4:
            next = co()
        elif next == 5:
            next = zg()
        else:
            print("an error occured. restart. Exit Code:", next)
            next = 0
            exit = 0
        gameoverpossible()
    if exit == 1:
        abspann()

main()