r"""
MPP -> XML Konverter (auch .mpx, .mpd, .xer, .pp, .planner)
Verwendet mpxj-Bibliothek (Java-basiert, JPype-Bridge).

Aufruf:
  python mpp_to_xml.py "Pfad\zur\Datei.mpp"
  -> erzeugt "Pfad\zur\Datei.xml" (MS Project XML, kompatibel mit Watchdog)
"""
import sys
import os
import glob
import shutil
import subprocess

def die(msg, code=1):
    print(msg)
    sys.exit(code)

def check_java():
    if shutil.which("java"):
        return True
    try:
        subprocess.run(["java", "-version"], capture_output=True, check=True)
        return True
    except Exception:
        return False

def main():
    if len(sys.argv) < 2:
        die("Verwendung: python mpp_to_xml.py <Datei.mpp>")
    src = os.path.abspath(sys.argv[1])
    if not os.path.isfile(src):
        die(f"Datei nicht gefunden: {src}")

    base, ext = os.path.splitext(src)
    ext = ext.lower()
    if ext not in (".mpp", ".mpx", ".mpd", ".xer", ".pp", ".planner", ".xml"):
        die(f"Unbekannte Endung {ext}. Erlaubt: .mpp .mpx .mpd .xer .pp .planner .xml")

    if not check_java():
        die("\nFEHLER: Java nicht gefunden.\n"
            "Bitte einmalig 1_Setup.bat ausfuehren\n"
            "oder Temurin JRE installieren: https://adoptium.net/")

    try:
        import jpype
        import jpype.imports
        import mpxj
    except ImportError as e:
        die(f"\nFEHLER: Python-Paket fehlt ({e}).\n"
            "Bitte einmalig 1_Setup.bat ausfuehren oder:\n"
            "  pip install mpxj jpype1")

    mpxj_dir = os.path.dirname(mpxj.__file__)
    jars = glob.glob(os.path.join(mpxj_dir, "lib", "*.jar"))
    if not jars:
        die(f"Keine JAR-Dateien gefunden in {mpxj_dir}/lib")

    if not jpype.isJVMStarted():
        jpype.startJVM(classpath=jars)

    from org.mpxj.reader import UniversalProjectReader
    from org.mpxj.writer import UniversalProjectWriter, FileFormat

    print(f"Lese: {src}")
    reader = UniversalProjectReader()
    project = reader.read(src)
    if project is None:
        die(f"Konnte {src} nicht lesen (Format wird ggf. nicht unterstuetzt).")

    tasks = project.getTasks()
    print(f"  -> {tasks.size()} Vorgaenge gefunden")

    out = base + ".xml"
    writer = UniversalProjectWriter(FileFormat.MSPDI)
    writer.write(project, out)
    print(f"Geschrieben: {out}")
    print()
    print(f"FERTIG. Du kannst jetzt {os.path.basename(out)} in den Claude-Chat ziehen.")

if __name__ == "__main__":
    main()
