# import für HTTP GET Anfrage an Webserver
import requests
# import für json Verarbeitung
import json
# import um Daten zu verarbeiten
import pandas
# import um Daten anzuzeigen/plotten
import matplotlib.pyplot as plt
# import um mit Datum und Zeit zu arbeiten
from datetime import datetime


######################################################################
######################################################################
# es wird eine API Anfrage an einen Webservice gemacht
# dieser liefert stündlich Temperaturprognosen von Mannheim
######################################################################
######################################################################

# Die URL liefert Daten über den zukünftigenTemperaturverlauf im JSON-Format
URL = "https://api.open-meteo.com/v1/forecast?latitude=49.49&longitude=8.47&hourly=temperature_2m"

# GET Anfrage an Webserver findet statt, alle Informationen werden in
# die Variable (Objekt) response gespeichert
response = requests.get(URL)

# wenn es kein OK vom Server gibt, schließt das Programm
if response.status_code != 200:
    exit(0)

# Antwort vom Server wird in String umgewandelt
responseText = response.text
# String wird in json bzw. dictionary umgewandelt
parsedJson = json.loads(responseText)
# die json - Daten werden formatiert ausgegeben
fullJsonPretty = json.dumps(parsedJson, indent=4)

# die benötigten Daten werden aus dem json geholt
# und in ein neues dictionary gepackt
# dictionaries bestehen aus key / value Paaren
# hier: key time und value sowie key temp und value 
data = {
    "time" : parsedJson["hourly"]["time"],
    "temp":parsedJson["hourly"]["temperature_2m"]
    }

# Ausgabe (optional)
print(data)

# ein dataframe wird erstellt, er dient zum Visualisieren der Daten
df = pandas.DataFrame(data)

# Ausgabe (optional)
print(df)

# zur Visualisierung aufbereiten
var = df.plot()
# x und y Achse bennenen
var.set_xlabel("Stündlich")
var.set_ylabel("Temp in C°")
# x Achsen min und max Wert begrenzen
var.set_xlim(xmin=0)
# xmax wird begrenzt mit der Arrayfelder
var.set_xlim(xmax=len(parsedJson["hourly"]["temperature_2m"]))
# Titel setzen
# aktuelles Datum und Uhrzeit mit Format: Tag/Montat/Jahr
currentDateTime = datetime.now().strftime("%d/%m/%Y")
# Titel aus verfügbaren Stunden zum Anzeigen und aus heutigem datum
var.set_title("Vorhergesagter Temperaturverlauf über " + str(len(parsedJson["hourly"]["temperature_2m"])) + " Stunden\n Beginn: " + currentDateTime)
# anzeigen lassen
plt.show()
