#!/usr/bin/env bash
set -e
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root"
   exit 1
fi

KASM_VERSION="1.18.0"
KASM_INSTALL_BASE="/opt/kasm/${KASM_VERSION}"

FLAG="recreate"
RECREATE_SVCS=()
KASM_SERVICE=""

# Help message
usage() {
  echo ""
  echo "Usage: sudo $(basename "$0") [service] [--soft | --recreate=svc1,svc2]"
  echo ""
  echo "  service              (optional) Restart a specific service"
  echo "  --soft               Restart containers without recreating"
  echo "  --recreate=db,...    Force recreate specific services"
  echo "  --help               Show this help message"
  echo ""
  exit 0
}

for arg in "$@"; do
  case "$arg" in
    --soft)
      FLAG="soft"
      ;;
    --recreate=*)
      FLAG="recreate"
      IFS=',' read -ra RECREATE_SVCS <<< "${arg#*=}"
      ;;
    --help)
      usage
      ;;
    --*)
      echo "Unknown flag: $arg"
      usage
      ;;
    *)
      [[ -z "$KASM_SERVICE" ]] && KASM_SERVICE="$arg"
      ;;
  esac
done

pushd "${KASM_INSTALL_BASE}/docker" > /dev/null

echo "Pulling latest Kasm Docker images (may be skipped if offline)"
bash "${KASM_INSTALL_BASE}/bin/utils/pull" || :

echo "Restarting Kasm Service: ${KASM_SERVICE:-all}"
export KASM_UID=$(id kasm -u)
export KASM_GID=$(id kasm -g)

if [[ $FLAG == "soft" ]]; then
  docker compose restart ${KASM_SERVICE:-}
elif [[ $FLAG == "recreate" ]]; then
  if ((${#RECREATE_SVCS[@]})); then
    docker compose up -d --force-recreate "${RECREATE_SVCS[@]}"
  else
    docker compose up -d --force-recreate ${KASM_SERVICE:-}
  fi
else
  docker compose up -d --force-recreate ${KASM_SERVICE:-}
fi

popd > /dev/null
