#!/usr/bin/env bash

# Copyright (c) 2021-2026 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.kasmweb.com/docs/latest/index.html

source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os

msg_info "Installing Docker"
if [[ "$(arch_resolve)" == "arm64" ]]; then
  setup_deb822_repo "docker" \
    "https://download.docker.com/linux/$(get_os_info id)/gpg" \
    "https://download.docker.com/linux/$(get_os_info id)" \
    "$(get_os_info codename)" \
    "stable"
  $STD apt install -y \
    docker-ce=5:28.5.2-1~debian.13~trixie \
    docker-ce-cli=5:28.5.2-1~debian.13~trixie \
    containerd.io=1.7.29-1~debian.13~trixie \
    docker-buildx-plugin docker-compose-plugin
  runc_tmp=$(mktemp -d)
  (cd "$runc_tmp" && apt-get download runc && dpkg-deb -x runc_*.deb x)
  dpkg-divert --local --rename --add /usr/bin/runc
  install -m755 "$runc_tmp"/x/usr/sbin/runc /usr/bin/runc
  rm -rf "$runc_tmp"
  systemctl restart containerd docker
else
  $STD sh <(curl -fsSL https://get.docker.com/)
fi
msg_ok "Installed Docker"

msg_info "Detecting latest Kasm Workspaces release"
KASM_URL=$(curl -s https://kasm.com/downloads \
  | grep -oP 'https://kasm-static-content\.s3\.amazonaws\.com/kasm_release_\d+\.\d+\.\d+-latest\.tar\.gz' \
  | head -1)
KASM_VERSION=$(echo "$KASM_URL" | grep -oP '\d+\.\d+\.\d+(?=-latest)')

# Fallback to predefined version if online lookup failed.
if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then
  msg_warn "Unable to fetch latest Kasm release online, falling back to v${var_kasm_version}"
fi

KASM_VERSION="${KASM_VERSION:-$var_kasm_version}"
KASM_URL="${KASM_URL:-https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}-latest.tar.gz}"

if [[ -z "$KASM_VERSION" ]] || [[ -z "$KASM_URL" ]]; then
  msg_error "Unable to detect latest Kasm release URL."
  exit 250
fi
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"

msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
msg_warn "The following code is NOT maintained or audited by our repository."
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→  install.sh inside tar.gz $KASM_URL"
echo
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
  msg_error "Aborted by user. No changes have been made."
  exit 10
fi

msg_info "Installing Kasm Workspaces"
curl_download "/opt/kasm_release_${KASM_VERSION}.tar.gz" "$KASM_URL"
cd /opt
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
chmod +x /opt/kasm_release/install.sh
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh --ignore-dep-failures >~/kasm-install.output 2>&1
awk '
  /^Kasm UI Login Credentials$/ {capture=1}
  capture {print}
  /^Service Registration Token$/ {in_token=1}
  in_token && /^-+$/ {dash_count++}
  in_token && dash_count==2 {exit}
' ~/kasm-install.output >~/kasm.creds
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
rm -f ~/kasm-install.output
msg_ok "Installed Kasm Workspaces"

motd_ssh
customize
cleanup_lxc
