#!/bin/bash
set -e

CDN="https://dev-portal-c2h.pages.dev"
DIR="$HOME/.dev-portal"
PORT=8888
SERVICE="devportal"

# ── helpers ───────────────────────────────────────────────────────────────────

info()    { echo -e "\e[32m==>\e[0m $*"; }
warning() { echo -e "\e[33m  !\e[0m $*"; }
die()     { echo -e "\e[31mError:\e[0m $*" >&2; exit 1; }

open_browser() {
  local url="$1"
  if command -v xdg-open &>/dev/null; then
    xdg-open "$url" &>/dev/null &
  elif command -v google-chrome &>/dev/null; then
    google-chrome "$url" &>/dev/null &
  elif command -v chromium &>/dev/null; then
    chromium "$url" &>/dev/null &
  fi
}

find_server() {
  if command -v python3 &>/dev/null; then
    echo "python3 -m http.server $PORT --directory $DIR"
  elif command -v npx &>/dev/null; then
    echo "npx --yes serve $DIR -p $PORT -s"
  else
    die "python3 або node не знайдено. Встановіть один з них."
  fi
}

# ── commands ──────────────────────────────────────────────────────────────────

cmd_install() {
  info "Встановлення Dev Portal..."

  mkdir -p "$DIR"

  info "Завантаження файлів з CDN..."
  curl -fsSL "$CDN/index.html"    -o "$DIR/index.html"
  curl -fsSL "$CDN/sw.js"         -o "$DIR/sw.js"
  curl -fsSL "$CDN/manifest.json" -o "$DIR/manifest.json"
  curl -fsSL "$CDN/icon.svg"      -o "$DIR/icon.svg"
  curl -fsSL "$CDN/version.json"  -o "$DIR/version.json"

  local server_cmd
  server_cmd=$(find_server)

  info "Створення systemd user service..."
  mkdir -p "$HOME/.config/systemd/user"
  cat > "$HOME/.config/systemd/user/${SERVICE}.service" <<EOF
[Unit]
Description=Dev Portal (localhost:${PORT})
After=network.target

[Service]
Type=simple
WorkingDirectory=${DIR}
ExecStart=${server_cmd}
Restart=on-failure

[Install]
WantedBy=default.target
EOF

  systemctl --user daemon-reload
  systemctl --user enable --now "$SERVICE"

  info "Готово! Відкриваю браузер..."
  sleep 1
  open_browser "http://localhost:$PORT"

  echo ""
  echo "  Dev Portal запущено на http://localhost:$PORT"
  echo "  Автозапуск при вході в систему увімкнено."
  echo ""
  echo "  Команди:"
  echo "    Оновити:    $0 --update"
  echo "    Зупинити:   systemctl --user stop $SERVICE"
  echo "    Видалити:   $0 --uninstall"
}

cmd_update() {
  info "Оновлення Dev Portal..."

  local remote_v local_v
  remote_v=$(curl -fsSL "$CDN/version.json" 2>/dev/null | grep -o '"v":"[^"]*"' | cut -d'"' -f4)
  local_v=$(grep -o '"v":"[^"]*"' "$DIR/version.json" 2>/dev/null | cut -d'"' -f4)

  if [ "$remote_v" = "$local_v" ] && [ -n "$remote_v" ]; then
    info "Вже остання версія ($local_v)."
    exit 0
  fi

  curl -fsSL "$CDN/index.html"    -o "$DIR/index.html"
  curl -fsSL "$CDN/sw.js"         -o "$DIR/sw.js"
  curl -fsSL "$CDN/manifest.json" -o "$DIR/manifest.json"
  curl -fsSL "$CDN/icon.svg"      -o "$DIR/icon.svg"
  curl -fsSL "$CDN/version.json"  -o "$DIR/version.json"

  systemctl --user restart "$SERVICE" 2>/dev/null || true

  info "Оновлено до версії $remote_v."
}

cmd_uninstall() {
  info "Видалення Dev Portal..."
  systemctl --user disable --now "$SERVICE" 2>/dev/null || true
  rm -f "$HOME/.config/systemd/user/${SERVICE}.service"
  systemctl --user daemon-reload
  rm -rf "$DIR"
  info "Видалено."
}

# ── entry point ───────────────────────────────────────────────────────────────

case "${1:-}" in
  --update)    cmd_update ;;
  --uninstall) cmd_uninstall ;;
  "")
    if [ -d "$DIR" ] && systemctl --user is-active --quiet "$SERVICE" 2>/dev/null; then
      warning "Dev Portal вже встановлено і запущено."
      echo "  Оновити:  $0 --update"
      echo "  Видалити: $0 --uninstall"
      exit 0
    fi
    cmd_install
    ;;
  *) die "Невідома команда: $1. Використовуй --update або --uninstall" ;;
esac
