from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
from tkinter import *
import csv


"""--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
"""-------Funktionen links-------------"""


def links_scale_lautstärke_change(self):
    linksLautstärke = float(linksScaleLautstärke.get())
    print("Links Lautstärke =", linksLautstärke)


def links_scale_frequenz_change(self):
    linksFrequenz = float(linksScaleFrequenz.get())
    print("Links Frequenz = ", linksFrequenz)


def links_scale_rauschen_lautstärke_change(self):
    linksRauschenLautstärke = float(linksScaleRauschenLautstärke.get())
    print("Links Rauschen Lautstärke = ", linksRauschenLautstärke)


def links_scale_rauschen_mittelfrequenz_change(self):
    linksRauschenMittelfrequenz = float(linksScaleRauschenMittelFrequenz.get())
    print("Links Rauschen Mittelfrequenz = ", linksRauschenMittelfrequenz)


def links_scale_rauschen_bandbreite_change(self):
    linksRauschenBandbreite = float(linksScaleRauschenBandbreite.get())
    print("Links Rauschen Bandbreite = ", linksRauschenBandbreite)


"""----------Funktionen rechts----------"""


def rechts_scale_lautstärke_change(self):
    rechtsLautstärke = float(rechtsScaleLautstärke.get())
    print("Rechts Lautstärke =", rechtsLautstärke)


def rechts_scale_frequenz_change(self):
    rechtsFrequenz = float(rechtsScaleFrequenz.get())
    print("Rechts Frequenz= ", rechtsFrequenz)


def rechts_scale_rauschen_lautstärke_change(self):
    rechtsRauschenLautstärke = float(rechtsScaleRauschenLautstärke.get())
    print("Rechts Rauschen Lautstärke = ", rechtsRauschenLautstärke)


def rechts_scale_rauschen_mittelfrequenz_change(self):
    rechtsRauschenMittelfrequenz = float(rechtsScaleRauschenMittelFrequenz.get())
    print("Rechts Rauschen Mittelfrequenz = ", rechtsRauschenMittelfrequenz)


def rechts_scale_rauschen_bandbreite_change(self):
    rechtsRauschenBandbreite = float(rechtsScaleRauschenBandbreite.get())
    print("Rechts Rauschen Bandbreite = ", rechtsRauschenBandbreite)


"""--------------Funktionen unten------------------"""


def unten_button_ohren_synchro():
    auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox
    print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen")

    if auswahl == "Linkes Ohr":     # linkes --> rechts
        rechtsScaleLautstärke.set(linksScaleLautstärke.get())
        rechtsScaleFrequenz.set(linksScaleFrequenz.get())
        rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get())
        rechtsScaleRauschenMittelFrequenz.set(linksScaleRauschenMittelFrequenz.get())
        rechtsScaleRauschenBandbreite.set(linksScaleRauschenBandbreite.get())

    if auswahl == "Rechtes Ohr":    # rechts --> links
        linksScaleLautstärke.set(rechtsScaleLautstärke.get())
        linksScaleFrequenz.set(rechtsScaleFrequenz.get())
        linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get())
        linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get())
        linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get())


def unten_button_speichern_press():
    print("button speichern pressed")
    # Wenn man Speichern will bevor ein Name eingegeben wurde
    if (not untenEntryVorname.get()) or (not untenEntryNachname.get()) or \
            (untenEntryNachname == "Erst Namen..") or (untenEntryVorname == "..eintragen bitte"):
        nachname.set("Erst Namen..")
        vorname.set("..eintragen bitte")
    else:
        print("TEST")


def unten_button_play_press():
    print("button play pressed")


def unten_button_stop_press():
    print("button stop press")


"""------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------"""
root = Tk()  # build the main window
root.title("Tinnitus Analyse")
#root.iconbitmap('headphones.ico') #todo: fix icon
#root.minsize(width=200, height=600)
root.resizable(True, True)
root.columnconfigure(0, weight=1)   # falls freier Platz im Fenster ist, werden die Frames diesen benutzen
root.rowconfigure(0, weight=1)


"""------------------------------------------LINKER FRAME------------------------------------------------------------"""
linkerFrame = LabelFrame(root, text="Linkes Ohr", font="bold")  # parent is root, padding is extra space at the edges
linkerFrame.grid(column=0, row=0, sticky=(N + W + E))  # the frame sticks to every side of the window when resized

linksLautstärke = DoubleVar()
linksFrequenz = DoubleVar()
linksRauschenLautstärke = DoubleVar()
linksRauschenFrequenzband = DoubleVar()

# ------------------ LAUTSTÄRKE ------------------
linksLabelLautstärke = Label(linkerFrame, text="Lautstärke [%]:")
linksLabelLautstärke.grid(column=0, row=0, sticky=W)
linksScaleLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=700,
                             command=links_scale_lautstärke_change)
linksScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W)

# -------- FREQUENZ ------------------------
linksLabelFrequenz = Label(linkerFrame, text="Frequenz [kHz]")
linksLabelFrequenz.grid(column=0, row=1,  sticky=W)     # sticky = w(est) makes the text left aligned
linksScaleFrequenz = Scale(linkerFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                           command=links_scale_frequenz_change)
linksScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E))

# ----------- ABTRENNSTRICH ----------------
linksSeparator = Separator(linkerFrame, orient="horizontal")
linksSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E))

# ----------- RAUSCHEN --------------------
linksLabelRauschenLautstärke = Label(linkerFrame, text="Rauschen Lautstärke %", anchor="w")
linksLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100,  orient=HORIZONTAL, length=700,
                                     command=links_scale_rauschen_lautstärke_change)
linksScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))

linksLabelRauschenMittelFrequenz = Label(linkerFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
linksLabelRauschenMittelFrequenz .grid(column=0, row=4)
linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                                         command=links_scale_rauschen_mittelfrequenz_change)
linksScaleRauschenMittelFrequenz.grid(column=1, row=4)

linksLabelRauschenBandbreite= Label(linkerFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
linksLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
linksScaleRauschenBandbreite = Scale(linkerFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                                     command=links_scale_rauschen_bandbreite_change)
linksScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))


"""----------------------------------------------RECHTER FRAME-------------------------------------------------------"""
rechterFrame = LabelFrame(root, text="Rechtes Ohr", font="bold")
rechterFrame.grid(column=2, row=0, sticky=(N + E + W))

# Variablen Rechts
rechtsFrequenz = DoubleVar()
rechtsRauschenLautstärke = DoubleVar()
rechtsRauschenFrequenzband = DoubleVar()
rechtsLautstärke = DoubleVar()

# ------------------ LAUTSTÄRKE ------------------
rechtsLabelLautstärke = Label(rechterFrame, text="Lautstärke [%]:")
rechtsLabelLautstärke.grid(column=0, row=0, sticky=W)
rechtsScaleLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HORIZONTAL, length=700,
                             command=rechts_scale_lautstärke_change)
rechtsScaleLautstärke.grid(column=1, row=0, columnspan=10, sticky=W)

# -------- FREQUENZ ------------------------
rechtsLabelFrequenz = Label(rechterFrame, text="Frequenz [kHz]")
rechtsLabelFrequenz.grid(column=0, row=1,  sticky=W)     # sticky = w(est) makes the text left aligned
rechtsScaleFrequenz = Scale(rechterFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                            command=rechts_scale_frequenz_change)
rechtsScaleFrequenz.grid(column=1, row=1, columnspan=10, sticky=(W+E))

# ----------- ABTRENNSTRICH ----------------
rechtsSeparator = Separator(rechterFrame, orient="horizontal")
rechtsSeparator.grid(column=0, row=2, columnspan=10, sticky=(W + E))

# ----------- RAUSCHEN --------------------
rechtsLabelRauschenLautstärke = Label(rechterFrame, text="Rauschen Lautstärke %", anchor="w")
rechtsLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100,  orient=HORIZONTAL, length=700,
                                      command=rechts_scale_rauschen_lautstärke_change)
rechtsScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))

rechtsLabelRauschenMittelFrequenz = Label(rechterFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
rechtsLabelRauschenMittelFrequenz .grid(column=0, row=4)
rechtsScaleRauschenMittelFrequenz = Scale(rechterFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                                          command=rechts_scale_rauschen_mittelfrequenz_change)
rechtsScaleRauschenMittelFrequenz.grid(column=1, row=4)

rechtsLabelRauschenBandbreite = Label(rechterFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
rechtsLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
rechtsScaleRauschenBandbreite = Scale(rechterFrame, from_=0, to=20,  orient=HORIZONTAL, length=700, resolution=-1.0,
                                      command=rechts_scale_rauschen_bandbreite_change)
rechtsScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))


"""------------------------------------------------ UNTERER FRAME----------------------------------------------------"""
untererFrame = LabelFrame(root, text="Generelles", border=10)
untererFrame.grid(column=0, row=1, sticky=(N + W + S))

vorname = StringVar()   # Name des Patienten als String um den generierten Tinnitus später zuordnen zu können
nachname = StringVar()
kommentare = StringVar()    # Ein Feld in dass der Patient noch weitere Kommentare angeben kann
# Den unteren Frame füllen----------------------------------------------------------------------------------------------

# --------- OHREN SYNCHRONISIEREN -----------------------
untenLabelOhrenSynchro = Label(untererFrame, text="Einstellungen von ")
untenLabelOhrenSynchro.grid(column=0, row=0, sticky=(N + W))
untenComboOhrenSynchro = Combobox(untererFrame, values=["Linkes Ohr", "Rechtes Ohr"])
untenComboOhrenSynchro.grid(column=1, row=0, sticky=(N + W + E + S))
untenLabelOhrenSynchro2 = Label(untererFrame, text=" für beide übernehmen")
untenLabelOhrenSynchro2.grid(column=2, row=0, sticky=(N + W + E + S))
untenButtonOhrenSynchro = Button(untererFrame, text="Bestätigen",
                                 command=unten_button_ohren_synchro)
untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + W + E + S))

#----------- PLAY BUTTON
untenButtonPlay = Button(untererFrame, text="PLAY", font="bold", relief="raised", bg="green", fg="white",
                         command=unten_button_play_press)
untenButtonPlay.grid(column=8, row=0, sticky=(N + W + E + S))

#------------STOP BUTTON-------------
untenButtonStop = Button(untererFrame, text="STOP", font="bold", relief="raised", bg="red", fg="white",
                         command=unten_button_stop_press)
untenButtonStop.grid(column=9, row=0, sticky=(N + W + E + S))

# ----------- ABTRENNSTRICHE ----------------
untenSeparator = Separator(untererFrame, orient="horizontal")
untenSeparator.grid(column=0, row=1, columnspan=10, sticky=(W + E))

untenSeperator2 = Separator(untererFrame, orient="vertical")
untenSeperator2.grid(column=5, rowspan=5, sticky=N+S)

# ------------NAMENSEINGABE-------------
untenLabelNachname = Label(untererFrame, text="Nachname:")
untenLabelNachname.grid(column=0, row=2, sticky=W)
untenEntryNachname = Entry(untererFrame, textvariable=nachname)
untenEntryNachname.grid(column=1, row=2, sticky=W)
untenLabelVorname = Label(untererFrame, text="Vorname:")
untenLabelVorname.grid(column=0, row=3, sticky=W)
untenEntryVorname = Entry(untererFrame, textvariable=vorname)
untenEntryVorname.grid(column=1, row=3, sticky=W)

# ------------ KOMMENTAR ----------------
untenLabelKommentar = Label(untererFrame, text="weitere Kommentare:")
untenLabelKommentar.grid(column=0, row=4, sticky=W)
untenTextKommentar = Text(untererFrame, height=10, width=50)  # create a field where u can enter text
untenTextKommentar.grid(column=1, row=4, columnspan=3, rowspan=3)

# ----------- SPEICHERN --------------------
untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold",
                              command=unten_button_speichern_press)
untenButtonSpeichern.grid(column=4, row=6, sticky=S)



# todo: , relief="raised" für play button


root.mainloop()