#!/usr/bin/env python3
import tkinter as tk
from tkinter import filedialog, messagebox
import subprocess
import os
import re

# Globaler Pfad zur QET-Datei
qet_file = ""

def select_file():
    global qet_file
    filename = filedialog.askopenfilename(
        title="QET-Datei auswählen",
        filetypes=[("QET Dateien", "*.qet"), ("Alle Dateien", "*.*")]
    )
    if filename:
        qet_file = filename
        file_label.config(text=qet_file)
    else:
        file_label.config(text="Keine Datei ausgewählt")

def create_new_qet_filename(original_qet, suffix):
    """
    Erzeugt einen neuen Dateinamen im selben Verzeichnis wie 'original_qet',
    wobei der Basisname ein zusätzliches 'suffix' erhält.
    Beispiel:
      original_qet = "/home/toto/Schreibtisch/VorlageMSR1.qet"
      suffix = "_klemmen"
    Ergebnis:
      "/home/toto/Schreibtisch/VorlageMSR1_klemmen.qet"
    """
    dir_of_qet = os.path.dirname(original_qet)
    base_of_qet = os.path.basename(original_qet)
    base, ext = os.path.splitext(base_of_qet)
    new_name = base + suffix + ext
    return os.path.join(dir_of_qet, new_name)

def create_processes():
    if not qet_file:
        messagebox.showerror("Fehler", "Bitte zuerst eine QET-Datei auswählen.")
        return

    # Skript-Aufrufe vorbereiten
    commands = []

    # Klemmen
    if var_klemmen.get():
        # Neue Ausgabedatei mit Suffix "_klemmen"
        out_file = create_new_qet_filename(qet_file, "_klemmen")
        commands.append(["python3", "Klemmen.py", qet_file, out_file])

    # Klemmplan
    if var_klemmplan.get():
        # Neue Ausgabedatei mit Suffix "_klemmplan"
        out_file = create_new_qet_filename(qet_file, "_klemmplan")
        commands.append(["python3", "Klemmplan.py", qet_file, out_file])

    # Kabelliste CSV
    if var_kabelliste.get():
        # Erzeuge Ausgabedatei im selben Verzeichnis
        dir_of_qet = os.path.dirname(qet_file)
        out_file = os.path.join(dir_of_qet, "kabelliste.csv")
        commands.append(["python3", "Kabelliste_csv.py", qet_file])
    
    # Kabelliste in QET
    if var_kabelliste_qet.get():
        # Neue Ausgabedatei mit Suffix "_kabelliste"
        out_file = create_new_qet_filename(qet_file, "_kabelliste")
        commands.append(["python3", "Kabelliste_qet.py", qet_file, out_file])

    if not commands:
        messagebox.showinfo("Info", "Bitte mindestens eine Funktion auswählen.")
        return

    for cmd in commands:
        try:
            # Setze das Arbeitsverzeichnis auf den Ordner, in dem dieses Skript liegt
            script_dir = os.path.dirname(os.path.abspath(__file__))

            # Führe das Skript aus und fange sowohl stdout als auch stderr ab
            result = subprocess.run(
                cmd,
                check=True,
                capture_output=True,
                text=True,
                cwd=script_dir
            )
            print(f"Kommando: {' '.join(cmd)}")
            print(f"Ausgabe von {cmd[1]}:\n{result.stdout}")
            print(f"Fehlermeldungen von {cmd[1]}:\n{result.stderr}")

        except subprocess.CalledProcessError as e:
            # Ausführliche Fehlermeldung
            message = (
                f"Fehler beim Ausführen von {cmd[1]}:\n\n"
                f"Kommando: {' '.join(cmd)}\n\n"
                f"Returncode: {e.returncode}\n\n"
                f"--- STDOUT ---\n{e.stdout}\n"
                f"--- STDERR ---\n{e.stderr}"
            )
            messagebox.showerror("Fehler", message)
            return

    messagebox.showinfo("Erfolg", "Ausgewählte Funktionen wurden erfolgreich ausgeführt.")

def quit_app():
    root.destroy()

# Hauptfenster erstellen
root = tk.Tk()
root.title("QElectroTech GUI")

# Frame für Dateiauswahl
frame_file = tk.Frame(root)
frame_file.pack(pady=10)
btn_select = tk.Button(frame_file, text="QET-Datei auswählen", command=select_file)
btn_select.pack(side=tk.LEFT)
file_label = tk.Label(frame_file, text="Keine Datei ausgewählt", width=50, anchor="w")
file_label.pack(side=tk.LEFT, padx=10)

# Frame für Checkboxen
frame_checks = tk.Frame(root)
frame_checks.pack(pady=10)
var_klemmen = tk.BooleanVar()
var_kabelliste = tk.BooleanVar()
var_klemmplan = tk.BooleanVar()
var_kabelliste_qet = tk.BooleanVar()
chk_klemmen = tk.Checkbutton(frame_checks, text="Klemmen durchzählen", variable=var_klemmen)
chk_kabelliste = tk.Checkbutton(frame_checks, text="Kabelliste als CSV erstellen", variable=var_kabelliste)
chk_klemmplan = tk.Checkbutton(frame_checks, text="Klemmenplan als CSV erstellen", variable=var_klemmplan)
#chk_kabelliste_qet = tk.Checkbutton(frame_checks, text="Kabelliste in QET einfügen", variable=var_kabelliste_qet)
chk_klemmen.pack(anchor="w")
chk_klemmplan.pack(anchor="w")
chk_kabelliste.pack(anchor="w")
#chk_kabelliste_qet.pack(anchor="w")

# Frame für Buttons
frame_buttons = tk.Frame(root)
frame_buttons.pack(pady=10)
btn_quit = tk.Button(frame_buttons, text="Beenden", command=quit_app)
btn_create = tk.Button(frame_buttons, text="Erstellen", command=create_processes)
btn_create.pack(side=tk.LEFT, padx=10)
btn_quit.pack(side=tk.LEFT, padx=10)

root.mainloop()

