"""
x8_manual_gui.py - Wrapper Simple para XML→SCL

Este script es un wrapper simple que:
1. Abre un cuadro de diálogo para seleccionar archivo XML
2. Abre un cuadro de diálogo para seleccionar directorio de destino
3. Ejecuta automáticamente x0_main.py en modo simple

No requiere GUI compleja, solo usa los cuadros de diálogo nativos de Windows.
"""

import tkinter as tk
from tkinter import filedialog, messagebox
import os
import sys
import subprocess


def main():
    """Función principal - Solo cuadros de diálogo y ejecución"""

    # Configurar el directorio de script
    script_dir = os.path.dirname(os.path.abspath(__file__))
    x0_main_path = os.path.join(script_dir, "x0_main.py")

    # Verificar que x0_main.py existe
    if not os.path.exists(x0_main_path):
        print(f"Error: No se encontró x0_main.py en: {x0_main_path}", file=sys.stderr)
        sys.exit(1)

    print("=== XML -> SCL Converter ===")
    print("Selecciona el archivo XML y directorio de destino...")
    print()

    # Crear ventana oculta para los cuadros de diálogo
    root = tk.Tk()
    root.withdraw()  # Ocultar la ventana principal

    try:
        # 1. Seleccionar archivo XML
        print("1. Seleccionando archivo XML...")
        source_xml = filedialog.askopenfilename(
            title="Seleccionar archivo XML de Siemens TIA Portal",
            filetypes=[("Archivos XML", "*.xml"), ("Todos los archivos", "*.*")],
            initialdir=script_dir,
        )

        if not source_xml:
            print("Operación cancelada por el usuario.")
            sys.exit(0)

        print(f"   Archivo seleccionado: {os.path.basename(source_xml)}")

        # 2. Seleccionar directorio de destino
        print("2. Seleccionando directorio de destino...")
        dest_dir = filedialog.askdirectory(
            title="Seleccionar directorio de destino", initialdir=script_dir
        )

        if not dest_dir:
            print("Operación cancelada por el usuario.")
            sys.exit(0)

        print(f"   Directorio seleccionado: {dest_dir}")

        # 3. Generar nombre de archivo de salida
        base_name = os.path.splitext(os.path.basename(source_xml))[0]
        dest_filename = f"{base_name}.scl"
        dest_scl = os.path.join(dest_dir, dest_filename)

        print(f"3. Archivo de salida: {dest_filename}")
        print()

        # 4. Confirmar operación
        confirm = messagebox.askyesno(
            "Confirmar Conversión",
            f"¿Convertir el archivo?\n\n"
            f"Origen: {os.path.basename(source_xml)}\n"
            f"Destino: {dest_scl}\n\n"
            f"¿Continuar?",
        )

        if not confirm:
            print("Operación cancelada por el usuario.")
            sys.exit(0)

        # 5. Ejecutar conversión
        print("4. Ejecutando conversión...")
        print("=" * 50)

        cmd = [
            sys.executable,
            x0_main_path,
            "--source-xml",
            source_xml,
            "--dest-scl",
            dest_scl,
        ]

        # Ejecutar proceso
        result = subprocess.run(
            cmd,
            cwd=script_dir,
            capture_output=False,  # Mostrar salida en tiempo real
            text=True,
        )

        # 6. Verificar resultado
        print("=" * 50)
        if result.returncode == 0 and os.path.exists(dest_scl):
            print("✅ CONVERSIÓN COMPLETADA EXITOSAMENTE")
            print(f"📁 Archivo generado: {dest_scl}")

            # Preguntar si abrir el directorio
            open_dir = messagebox.askyesno(
                "Conversión Exitosa",
                f"La conversión se completó exitosamente.\n\n"
                f"Archivo generado:\n{dest_scl}\n\n"
                f"¿Deseas abrir el directorio de destino?",
            )

            if open_dir:
                os.startfile(dest_dir)
        else:
            print("❌ ERROR EN LA CONVERSIÓN")
            print("Revisa los mensajes de error arriba.")

            messagebox.showerror(
                "Error en Conversión",
                "La conversión falló. Revisa los mensajes de error en la consola.",
            )

    except Exception as e:
        print(f"❌ ERROR INESPERADO: {e}")
        messagebox.showerror(
            "Error Inesperado", f"Error inesperado durante la conversión:\n{e}"
        )
        sys.exit(1)

    finally:
        # Cerrar la ventana oculta
        root.destroy()


if __name__ == "__main__":
    main()
