#!/bin/bash
# Тот же сценарий, что install-macos.sh (скачать + чистая установка).
# Двойной клик часто блокируется Gatekeeper — лучше:
#   curl -fsSL https://talkpilot.pro/downloads/install-macos.sh | bash
set -euo pipefail

APP_NAME="TalkPilot.app"
OLD_APP_NAME="Voice Translator.app"
DEST="/Applications/${APP_NAME}"
DMG_URL="https://talkpilot.pro/downloads/Voice-Translator.dmg"
TMP_DIR="$(mktemp -d /tmp/talkpilot-install-XXXXXX)"
DMG_PATH="${TMP_DIR}/Voice-Translator.dmg"
MOUNT_DIR=""

cleanup() {
  if [[ -n "${MOUNT_DIR}" ]]; then
    hdiutil detach "${MOUNT_DIR}" -quiet 2>/dev/null || true
  fi
  hdiutil detach "/Volumes/Voice Translator" -quiet 2>/dev/null || true
  for vol in /Volumes/TalkPilot*; do
    [[ -e "${vol}" ]] || continue
    hdiutil detach "${vol}" -quiet 2>/dev/null || true
  done
  for vol in /Volumes/*; do
    if [[ -d "${vol}/${APP_NAME}" || -d "${vol}/${OLD_APP_NAME}" ]]; then
      hdiutil detach "${vol}" -quiet 2>/dev/null || true
    fi
  done
  rm -rf "${TMP_DIR}"
}
trap cleanup EXIT

remove_old_talkpilot() {
  echo "Stopping old TalkPilot..."
  killall "TalkPilot" 2>/dev/null || true
  killall "TalkPilot Helper" 2>/dev/null || true
  killall "TalkPilot Helper (GPU)" 2>/dev/null || true
  killall "TalkPilot Helper (Renderer)" 2>/dev/null || true
  killall "TalkPilot Helper (Plugin)" 2>/dev/null || true
  killall "Voice Translator" 2>/dev/null || true
  killall "Voice Translator Helper" 2>/dev/null || true
  killall "Voice Translator Helper (GPU)" 2>/dev/null || true
  killall "Voice Translator Helper (Renderer)" 2>/dev/null || true
  killall "Voice Translator Helper (Plugin)" 2>/dev/null || true
  sleep 1
  echo "Removing old app from Applications..."
  rm -rf "${DEST}" "/Applications/${OLD_APP_NAME}"
  echo "Clearing old session / cache..."
  rm -rf \
    "${HOME}/Library/Application Support/TalkPilot" \
    "${HOME}/Library/Application Support/Voice Translator" \
    "${HOME}/Library/Application Support/voiceflow-desktop" \
    "${HOME}/Library/Application Support/com.voiceflow.desktop" \
    "${HOME}/Library/Caches/TalkPilot" \
    "${HOME}/Library/Caches/Voice Translator" \
    "${HOME}/Library/Caches/voiceflow-desktop" \
    "${HOME}/Library/Caches/com.voiceflow.desktop" \
    "${HOME}/Library/Saved Application State/com.voiceflow.desktop.savedState" \
    "${HOME}/Library/Preferences/com.voiceflow.desktop.plist" \
    2>/dev/null || true
}

osascript <<'EOF' || true
display dialog "TalkPilot сам удалит старую версию, очистит сессию, скачает и установит новую (~100 МБ).
Нужен интернет." buttons {"Продолжить"} default button 1 with title "Установка TalkPilot"
EOF

echo "Downloading TalkPilot..."
curl -fL --retry 3 -o "${DMG_PATH}" "${DMG_URL}?t=$(date +%s)"
xattr -cr "${DMG_PATH}" 2>/dev/null || true

echo "Mounting DMG..."
ATTACH_OUT="$(hdiutil attach "${DMG_PATH}" -nobrowse -readonly)"
MOUNT_DIR="$(printf '%s\n' "${ATTACH_OUT}" | awk '/\/Volumes\// {print $NF; exit}')"
if [[ -z "${MOUNT_DIR}" || ! -d "${MOUNT_DIR}" ]]; then
  for vol in /Volumes/*; do
    if [[ -d "${vol}/${APP_NAME}" || -d "${vol}/${OLD_APP_NAME}" ]]; then
      MOUNT_DIR="${vol}"
      break
    fi
  done
fi

SRC=""
for name in "${APP_NAME}" "${OLD_APP_NAME}"; do
  if [[ -d "${MOUNT_DIR}/${name}" ]]; then
    SRC="${MOUNT_DIR}/${name}"
    break
  fi
done
if [[ -z "${SRC}" || ! -d "${SRC}" ]]; then
  osascript <<'EOF' || true
display dialog "Не удалось открыть образ диска TalkPilot." buttons {"OK"} default button 1 with icon stop
EOF
  exit 1
fi

remove_old_talkpilot
ditto "${SRC}" "${DEST}"
xattr -cr "${DEST}" || true
open "${DEST}"

osascript <<'EOF' || true
display notification "TalkPilot установлен и запускается" with title "TalkPilot"
EOF

echo "Done."
exit 0
