#!/usr/bin/env bash
# JA3 из GOG offline backup: setup_*.exe + setup_*-1.bin … -4.bin в одной папке.
# Galaxy не нужен. Установщик читает .bin рядом с .exe (не копируем 15 GB в bottle).
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"

JA3_GAMES_DIR="${JA3_GAMES_DIR:-${HOME}/Games}"
JA3_SETUP_EXE="${JA3_SETUP_EXE:-}"
LOG="/tmp/ja3-multipart-install-${BOTTLE_NAME}.log"

# Имена GOG v1.5.2 (80730); при другой версии задайте JA3_SETUP_EXE.
JA3_EXE_DEFAULT="${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730).exe"
JA3_BINS=(
  "${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-1.bin"
  "${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-2.bin"
  "${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-3.bin"
  "${JA3_GAMES_DIR}/setup_jagged_alliance_3_1.5.2_(80730)-4.bin"
)

gog_unix_to_win() {
  local u="$1"
  if [[ -x "${WINEPATH_BIN}" ]]; then
    "${WINEPATH_BIN}" -w "${u}"
  else
    # fallback: Z: = /
    local rest="${u#/}"
    echo "Z:\\\\${rest//\//\\\\}"
  fi
}

find_setup_exe() {
  if [[ -n "${JA3_SETUP_EXE}" && -f "${JA3_SETUP_EXE}" ]]; then
    echo "${JA3_SETUP_EXE}"
    return 0
  fi
  if [[ -f "${JA3_EXE_DEFAULT}" ]]; then
    echo "${JA3_EXE_DEFAULT}"
    return 0
  fi
  local f
  f="$(find "${JA3_GAMES_DIR}" -maxdepth 1 -iname 'setup*jagged*alliance*3*.exe' -print -quit 2>/dev/null || true)"
  [[ -n "${f}" && -f "${f}" ]] && echo "${f}" && return 0
  return 1
}

usage() {
  cat <<EOF
Использование: bash $0

Папка с архивами (по умолчанию): ${JA3_GAMES_DIR}

Нужны 5 файлов в одной папке:
  setup_jagged_alliance_3_1.5.2_(80730).exe   (~1 MB, лаунчер Inno)
  setup_jagged_alliance_3_1.5.2_(80730)-1.bin … -4.bin

Скачать недостающий .exe: https://www.gog.com/account → JA3 → offline backup (первая, ~1 MB часть).

Или:
  lgogdownloader --login
  bash ${GOG_DIR}/fetch-ja3-setup-exe.sh

Переменные: JA3_GAMES_DIR, JA3_SETUP_EXE
EOF
}

verify_parts() {
  local exe="$1"
  local missing=0
  local b

  if [[ ! -d "${JA3_GAMES_DIR}" ]]; then
    echo "❌ Нет каталога: ${JA3_GAMES_DIR}"
    return 1
  fi

  for b in "${JA3_BINS[@]}"; do
    if [[ ! -f "${b}" ]]; then
      echo "❌ Нет: ${b}"
      missing=1
    fi
  done

  if [[ ! -f "${exe}" ]]; then
    echo "❌ Нет лаунчера .exe (~1 MB) в ${JA3_GAMES_DIR}"
    echo "   У вас есть 4× .bin — без .exe установка GOG не стартует."
    echo "   Скачайте с account.gog.com первую часть offline backup (installer0, ~1 MB)."
    echo "   Или: bash ${GOG_DIR}/fetch-ja3-setup-exe.sh"
    missing=1
  fi

  [[ "${missing}" -eq 0 ]]
}

main() {
  local exe win_exe
  exe="$(find_setup_exe)" || exe=""

  if ! verify_parts "${exe}"; then
    echo ""
    usage
    exit 1
  fi

  bash "${GOG_DIR}/emergency-stop.sh" || true
  gog_swap_guard "${GOG_SWAP_MAX_MB:-400}" || exit 1
  # bins (~15 GB) + распаковка в bottle (~16 GB) — пик ~25–30 GB на Data
  gog_disk_guard "${JA3_MIN_DISK_GB:-25}" || {
    echo "❌ Мало места: нужно ≥25 GB свободно на Data (архивы + игра в bottle)."
    echo "   Сейчас: $(df -h "$(gog_data_volume_path)" | awk 'NR==2 {print $4 " свободно, " $5 " занято"}')"
    exit 1
  }

  export_wine_env_gog
  gog_wine_check

  win_exe="$(gog_unix_to_win "${exe}")"
  SILENT=(/VERYSILENT /SUPPRESSMSGBOXES /NORESTART)

  echo "Установка JA3 из multipart (без Galaxy)"
  echo "  Папка: ${JA3_GAMES_DIR}"
  echo "  Wine:  ${win_exe}"
  echo "  Лог:   ${LOG}"
  : >"${LOG}"

  # Inno ищет .bin в каталоге установщика — запуск из JA3_GAMES_DIR
  cd "${JA3_GAMES_DIR}"
  if ! "${WINE64}" "${win_exe}" "${SILENT[@]}" >>"${LOG}" 2>&1; then
    echo "⚠️  Wine-Inno не прошёл — пробуем innoextract (без botva2/gdi32)…"
    if command -v innoextract >/dev/null 2>&1; then
      exec bash "${GOG_DIR}/install-ja3-innoextract.sh"
    fi
    echo "❌ Установщик завершился с ошибкой:"
    strings "${LOG}" 2>/dev/null | tail -20 || tail -20 "${LOG}"
    exit 1
  fi

  if [[ -f "${BOTTLE_DIR}/drive_c/GOG Games/Jagged Alliance 3/JA3.exe" ]]; then
    date -u +"%Y-%m-%dT%H:%M:%SZ" >"${BOTTLE_DIR}/.ja3_installed"
    echo ""
    echo "OK: JA3 установлен."
    echo "  Запуск: bash ${GOG_DIR}/run-ja3.sh"
    echo "  После проверки игры можно удалить .bin в ${JA3_GAMES_DIR} (~15 GB)."
  else
    echo "⚠️  JA3.exe не найден в bottle — tail лога:"
    tail -40 "${LOG}"
    exit 1
  fi
}

main "$@"
