#!/usr/bin/env bash

# ==============================================================
# ProxMenux - Windows ISO Selector (Dialog Edition)
# ==============================================================

REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
UUP_REPO="$REPO_URL/scripts/vm"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
ISO_DIR="/var/lib/vz/template/iso"

[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
load_language
initialize_cache
mkdir -p "$ISO_DIR"

function select_windows_iso() {
  local CHOICE
  CHOICE=$(dialog --backtitle "ProxMenux" --title "$(translate "Windows ISO")" \
    --menu "$(translate "Select how to provide the Windows ISO:")" 15 60 5 \
    1 "$(translate "Use existing ISO from storage")" \
    2 "$(translate "Download ISO using UUP Dump")" \
    3 "$(translate "Return to Main Menu")" 3>&1 1>&2 2>&3)

  [[ $? -ne 0 ]] && return 1  # ESC o cancelar

  case "$CHOICE" in
    1)
      select_existing_iso || return 1
      ;;
    2)
      if source <(curl -fsSL "$UUP_REPO/uupdump_creator.sh"); then
          run_uupdump_creator || return 1
          detect_latest_iso_created || return 1
      else
        msg_error "$(translate "UUP Dump script not found.")"
        return 1
      fi
      ;;
    3)
      return 1
      ;;
  esac
  return 0
}

function select_existing_iso() {
  ISO_LIST=()
  while read -r line; do
    FILENAME=$(basename "$line")
    SIZE=$(du -h "$line" | cut -f1)
    ISO_LIST+=("$FILENAME" "$SIZE")
  done < <(find "$ISO_DIR" -type f -iname "*.iso" ! -iname "virtio*" | sort)

  if [[ ${#ISO_LIST[@]} -eq 0 ]]; then
    msg_error "$(translate "No ISO images found in $ISO_DIR.")"
    sleep 2
    return 1
  fi

  ISO_FILE=$(dialog --backtitle "ProxMenux" --title "$(translate "Available ISO Images")" \
    --menu "$(translate "Choose a Windows ISO to use:")" 20 70 10 \
    "${ISO_LIST[@]}" 3>&1 1>&2 2>&3)

  [[ -z "$ISO_FILE" ]] && msg_warn "$(translate "No ISO selected.")" && return 1

  ISO_PATH="$ISO_DIR/$ISO_FILE"
  ISO_NAME="$ISO_FILE"

  export ISO_PATH ISO_FILE ISO_NAME
  export OS_TYPE="2"
  
  return 0
}

function detect_latest_iso_created() {
  ISO_FILE=$(find "$ISO_DIR" -maxdepth 1 -type f -iname "*.iso" ! -iname "virtio*" -printf "%T@ %p\n" | sort -n | awk '{print $2}' | tail -n 1)

  if [[ -z "$ISO_FILE" ]]; then
    msg_error "$(translate "No ISO file detected after UUP Dump process.")"
    sleep 2
    return 1
  fi

  ISO_NAME=$(basename "$ISO_FILE")
  ISO_PATH="$ISO_FILE"

  export ISO_PATH ISO_FILE ISO_NAME
  export OS_TYPE="2"

  return 0
}
