#!/usr/bin/env bash
# Install hot-tub web service on Raspberry Pi OS (run with sudo).
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
INSTALL_ROOT="${INSTALL_ROOT:-${REPO_ROOT}}"

if [[ "$(id -u)" -ne 0 ]]; then
  echo "Run as root: sudo $0" >&2
  exit 1
fi

DIST="${INSTALL_ROOT}/src/web/frontend/dist/index.html"
if [[ ! -f "${DIST}" ]]; then
  echo "Missing built frontend: ${DIST}" >&2
  echo "Build on a dev machine: cd src/web/frontend && npm install && npm run build" >&2
  exit 1
fi

echo "==> Installing packages (python3-redis, python3-flask)..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y -qq python3-redis python3-flask

if ! systemctl is-active --quiet redis-server 2>/dev/null && ! systemctl is-active --quiet redis 2>/dev/null; then
  echo "==> Redis not running; installing redis-server..."
  apt-get install -y -qq redis-server
fi

echo "==> Ensuring hot-tub system user..."
if ! id hot-tub &>/dev/null; then
  useradd --system --home /var/lib/hot-tub --shell /usr/sbin/nologin hot-tub
fi

echo "==> Preparing log and config paths..."
mkdir -p /var/log/hot-tub /etc/hot-tub /var/lib/hot-tub
chown hot-tub:hot-tub /var/log/hot-tub /var/lib/hot-tub

if [[ ! -f /etc/hot-tub/web.json ]]; then
  install -m 0644 "${INSTALL_ROOT}/src/web/config.example.json" /etc/hot-tub/web.json
  sed -i "s|\"static_dir\": \"frontend/dist\"|\"static_dir\": \"${INSTALL_ROOT}/src/web/frontend/dist\"|" /etc/hot-tub/web.json
  echo "    Created /etc/hot-tub/web.json from example"
else
  echo "    Keeping existing /etc/hot-tub/web.json"
fi

echo "==> Installing systemd unit..."
sed "s|__INSTALL_ROOT__|${INSTALL_ROOT}|g" "${SCRIPT_DIR}/hot-tub-web.service" \
  > /etc/systemd/system/hot-tub-web.service

echo "==> Installing logrotate..."
install -m 0644 "${SCRIPT_DIR}/hot-tub-web.logrotate" /etc/logrotate.d/hot-tub-web

echo "==> Enabling services..."
systemctl enable redis-server 2>/dev/null || systemctl enable redis 2>/dev/null || true
systemctl start redis-server 2>/dev/null || systemctl start redis 2>/dev/null || true
systemctl daemon-reload
systemctl enable hot-tub-web.service
systemctl restart hot-tub-web.service || systemctl start hot-tub-web.service

echo ""
echo "Installation complete."
echo "  Repo / code root: ${INSTALL_ROOT}"
echo "  Config:           /etc/hot-tub/web.json"
echo "  Log:              /var/log/hot-tub/web.log"
echo "  UI:               http://<pi-ip>:8080/"
echo ""
echo "Status:  systemctl status hot-tub-web"
echo "Logs:    tail -f /var/log/hot-tub/web.log"
echo "SSE:     curl -N http://localhost:8080/api/events"
