#!/usr/bin/env bash
# deploy_wails_exe_to_windows — Copia el .exe de una app Wails compilado en
# <app_dir>/build/bin/<app>.exe al escritorio de Windows, mata el proceso
# anterior y relanza la app. Single-binary: no copia DLLs (Webview2 nativo SO).
# Pre-authorized: taskkill.exe /F — idempotente, sin prompt.

set -euo pipefail

deploy_wails_exe_to_windows() {
    local app="${1:-}"
    local app_dir="${2:-}"

    if [ -z "$app" ] || [ -z "$app_dir" ]; then
        echo "ERROR: uso: deploy_wails_exe_to_windows <app_name> <app_dir>" >&2
        echo "  app_name: nombre del binario sin extension (ej. matrix_client_pc)" >&2
        echo "  app_dir:  ruta absoluta al directorio de la app (donde vive build/bin/)" >&2
        return 1
    fi

    local win_desktop_apps="${WIN_DESKTOP_APPS:-/mnt/c/Users/lucas/Desktop/apps}"

    # --- 1. Validar que el .exe existe ---
    local exe_src="${app_dir}/build/bin/${app}.exe"
    if [ ! -f "$exe_src" ]; then
        echo "ERROR: no se encontro $exe_src" >&2
        echo "Compila primero con: wails build -platform windows/amd64" >&2
        return 1
    fi

    # --- 2. Crear directorio destino (preserva local_files/ si existe) ---
    local dest="${win_desktop_apps}/${app}"
    mkdir -p "$dest"
    echo "[deploy_wails] dest: $dest" >&2

    # --- 3. Matar proceso si esta corriendo en Windows ---
    # Pre-authorized. Wails apps usan AppData+keyring para estado, kill /F es seguro.
    if command -v taskkill.exe >/dev/null 2>&1; then
        echo "[deploy_wails] matando ${app}.exe si corre..." >&2
        taskkill.exe /IM "${app}.exe" /F 2>/dev/null || true
    fi

    # --- 4. Esperar a que Windows libere el file handle ---
    sleep 1

    # --- 5. Copiar .exe (cp -f: overwrite sin borrar el directorio) ---
    echo "[deploy_wails] copiando ${app}.exe..." >&2
    cp -f "$exe_src" "$dest/${app}.exe"

    # --- 6. Copiar appicon.ico si existe (opcional, algunos hubs lo leen) ---
    local icon_src="${app_dir}/appicon.ico"
    if [ -f "$icon_src" ]; then
        echo "[deploy_wails] copiando appicon.ico..." >&2
        cp -f "$icon_src" "$dest/appicon.ico"
    fi

    # --- 7. Relanzar la app desde su dir Windows ---
    # Usar cmd.exe /c start desde el dir destino (no UNC paths — falla en cmd.exe).
    echo "[deploy_wails] lanzando ${app}.exe..." >&2
    (
        cd "$dest"
        cmd.exe /c start "" "${app}.exe"
    )

    # --- 8. Dar tiempo a que el proceso arranque ---
    sleep 3

    # --- 9. Verificar que el proceso esta corriendo ---
    if command -v tasklist.exe >/dev/null 2>&1; then
        local tasklist_out
        tasklist_out=$(tasklist.exe /FI "IMAGENAME eq ${app}.exe" /NH 2>/dev/null || true)
        if echo "$tasklist_out" | grep -qi "^${app}.exe"; then
            local pid
            pid=$(echo "$tasklist_out" | grep -i "^${app}.exe" | awk '{print $2}' | head -n1)
            echo "[deploy_wails] ${app}.exe corriendo con PID $pid" >&2
        else
            echo "WARN: ${app}.exe no aparece en tasklist tras el lanzamiento." >&2
            echo "  Puede que la app cerro con error. Revisar AppData para logs." >&2
        fi
    fi

    # --- 10. Resumen final en stdout ---
    ls -lh "$dest/${app}.exe"

    echo "[deploy_wails] OK: ${app} deployado en $dest" >&2
    if [ -d "$dest/local_files" ]; then
        echo "[deploy_wails] local_files/ preservado: $(du -sh "$dest/local_files" | cut -f1)" >&2
    fi
}

if [ "${BASH_SOURCE[0]}" = "$0" ]; then
    deploy_wails_exe_to_windows "$@"
fi
