#!/usr/bin/env bash
set -Eeuo pipefail

IMAGE_REMOTE="ghcr.io/aikanairo/teledisk:1.5"
IMAGE_LOCAL="teledisk:1.5"
TARBALL_URL="https://teledisk.net/release/Teledisk-1.5-docker-image.tar.gz"
NAME="${TELEDISK_CONTAINER_NAME:-teledisk}"
PORT="${TELEDISK_NOVNC_PORT:-6080}"
DOWNLOADS="${TELEDISK_DOWNLOADS:-$HOME/TelediskDownloads}"
DNS_PRIMARY="${TELEDISK_DOCKER_DNS:-1.1.1.1}"
DNS_FALLBACK="${TELEDISK_DOCKER_DNS_FALLBACK:-8.8.8.8}"
NETWORK_MODE="${TELEDISK_DOCKER_NETWORK_MODE:-auto}"
LOAD_ONLY="${TELEDISK_DOCKER_LOAD_ONLY:-0}"

mkdir -p "$DOWNLOADS"

if [[ "$NETWORK_MODE" == "auto" ]]; then
  if [[ "$(uname -s)" == "Linux" ]]; then
    NETWORK_MODE="host"
  else
    NETWORK_MODE="bridge"
  fi
fi

if docker pull "$IMAGE_REMOTE"; then
  docker tag "$IMAGE_REMOTE" "$IMAGE_LOCAL"
else
  TMP="$(mktemp -t teledisk-docker-image.XXXXXX.tar.gz)"
  trap 'rm -f "$TMP"' EXIT
  curl -fL "$TARBALL_URL" -o "$TMP"
  gzip -dc "$TMP" | docker load
fi
IMAGE="$IMAGE_LOCAL"

if [[ "$LOAD_ONLY" == "1" ]]; then
  echo "Immagine Teledisk Docker pronta: $IMAGE"
  exit 0
fi

if docker ps -a --format '{{.Names}}' | grep -qx "$NAME"; then
  docker rm -f "$NAME" >/dev/null
fi

DOCKER_NET_ARGS=()
DISPLAY_PORT="$PORT"
if [[ "$NETWORK_MODE" == "host" ]]; then
  DOCKER_NET_ARGS=(--network host)
  DISPLAY_PORT="6080"
else
  DOCKER_NET_ARGS=(-p "$PORT:6080" --dns "$DNS_PRIMARY" --dns "$DNS_FALLBACK")
fi

docker run -d \
  --name "$NAME" \
  --restart unless-stopped \
  "${DOCKER_NET_ARGS[@]}" \
  -v teledisk-data:/data \
  -v "$DOWNLOADS:/downloads" \
  -e TELEDISK_RELEASE_OS=docker \
  "$IMAGE"

echo "Teledisk Docker avviato: http://localhost:$DISPLAY_PORT/vnc.html?autoconnect=1&resize=remote"
