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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
ENV_FILE="${ENV_FILE:-${REPO_DIR}/deploy/env/cam1.env}"

if [[ "${EUID}" -ne 0 ]]; then
  echo "Run this script with sudo or as root."
  exit 1
fi

if [[ -f "${ENV_FILE}" ]]; then
  source "${ENV_FILE}"
fi

MEDIA_MTX_VERSION="${MEDIA_MTX_VERSION:-v1.8.4}"

if command -v mediamtx >/dev/null 2>&1; then
  installed_version="$(mediamtx --version 2>/dev/null || true)"
  if [[ "${installed_version}" == "${MEDIA_MTX_VERSION}" ]]; then
    exit 0
  fi
fi

arch="$(dpkg --print-architecture)"
case "${arch}" in
  amd64) mediamtx_arch="linux_amd64" ;;
  arm64) mediamtx_arch="linux_arm64" ;;
  *)
    echo "Unsupported architecture for automated MediaMTX install: ${arch}"
    exit 1
    ;;
esac

tmp_dir="$(mktemp -d /tmp/mediamtx.XXXXXX)"
archive="${tmp_dir}/mediamtx.tar.gz"
url="https://github.com/bluenviron/mediamtx/releases/download/${MEDIA_MTX_VERSION}/mediamtx_${MEDIA_MTX_VERSION#v}_${mediamtx_arch}.tar.gz"

curl -L "${url}" -o "${archive}"
tar -xzf "${archive}" -C "${tmp_dir}"
install -m 0755 "${tmp_dir}/mediamtx" /usr/local/bin/mediamtx

cat > /etc/systemd/system/mediamtx.service <<'UNIT'
[Unit]
Description=MediaMTX Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mediamtx /root/mediamtx/mediamtx.yml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
UNIT

rm -rf "${tmp_dir}"
