import math

def calculate_wavelength(freq_mhz):
    if freq_mhz <= 0:
        return "Ungültiger Wert. Frequenz muss größer als 0 sein."
    wavelength = 300 / freq_mhz
    return "{:.2f} m".format(wavelength)

def calculate_frequency(wavelength):
    if wavelength <= 0:
        return "Ungültiger Wert. Wellenlänge muss größer als 0 sein."
    freq_mhz = 300 / wavelength
    return "{:.2f} MHz".format(freq_mhz)

def calculate_inductance(diameter, wire_diameter):
    if diameter <= 0 or wire_diameter <= 0:
        return "Ungültiger Wert. Durchmesser müssen größer als 0 sein."
    inductance = 0.0002 * math.pi * diameter * (math.log(8 * diameter / wire_diameter) - 2)
    return "{:.3f} µH".format(inductance)

def calculate_resonant_frequency(inductance_uh, capacitance_pf):
    if inductance_uh <= 0 or capacitance_pf <= 0:
        return "Ungültiger Wert. Induktivität und Kapazität müssen größer als 0 sein."
    inductance_h = inductance_uh / 1e6
    capacitance_f = capacitance_pf / 1e12
    resonant_frequency_hz = 1 / (2 * math.pi * math.sqrt(inductance_h * capacitance_f))
    resonant_frequency_khz = resonant_frequency_hz / 1e3
    return "{:.3f} kHz".format(resonant_frequency_khz)

def calculate_spule_inductance(diameter_cm, length_cm, num_turns):
    if diameter_cm <= 0 or length_cm <= 0 or num_turns <= 0:
        return "Ungültiger Wert. Alle Eingabewerte müssen größer als 0 sein."
    mu_0 = 4 * math.pi * 1e-7
    radius_m = diameter_cm / 200
    area_m2 = math.pi * radius_m ** 2
    inductance_h = (mu_0 * num_turns ** 2 * area_m2) / (length_cm / 100)
    inductance_uh = inductance_h * 1e6
    return "{:.3f} µH".format(inductance_uh)

# Hauptprogramm
while True:
    print("1: Wellenlänge berechnen")
    print("2: Frequenz berechnen")
    print("3: Loop Induktivität berechnen")
    print("4: Resonanzfrequenz berechnen")
    print("5: Spuleninduktivität berechnen")
    print("6: Beenden")
    choice = input("Bitte wähle eine Option: ")

    if choice == "1":
        freq_mhz = float(input("Frequenz in MHz: "))
        print(calculate_wavelength(freq_mhz))
    elif choice == "2":
        wavelength = float(input("Wellenlänge in Meter: "))
        print(calculate_frequency(wavelength))
    elif choice == "3":
        diameter = float(input("Durchmesser der Loop-Antenne in mm: "))
        wire_diameter = float(input("Drahtdurchmesser der Loop-Antenne in mm: "))
        print(calculate_inductance(diameter, wire_diameter))
    elif choice == "4":
        inductance_uh = float(input("Induktivität der Loop-Antenne in µH: "))
        capacitance_pf = float(input("Kapazität des (Dreh-)Kondensators in pF: "))
        print(calculate_resonant_frequency(inductance_uh, capacitance_pf))
    elif choice == "5":
        diameter_cm = float(input("Durchmesser der Luftspule in cm: "))
        length_cm = float(input("Länge der Luftspule in cm: "))
        num_turns = int(input("Anzahl der Windungen: "))
        print(calculate_spule_inductance(diameter_cm, length_cm, num_turns))
    elif choice == "6":
        break
    else:
        print("Ungültige Auswahl, bitte versuche es erneut.")
