#!/usr/bin/env bash
# Install hot-tub control daemon 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

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

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 "==> Creating 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
usermod -aG gpio hot-tub 2>/dev/null || true

echo "==> Preparing log, config, and state 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/control.json ]]; then
  install -m 0644 "${INSTALL_ROOT}/src/control/config.example.json" /etc/hot-tub/control.json
  echo "    Created /etc/hot-tub/control.json from example"
else
  echo "    Keeping existing /etc/hot-tub/control.json"
fi

chown -R hot-tub:hot-tub "${INSTALL_ROOT}/src/control" 2>/dev/null || true

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

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

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-control.service
systemctl restart hot-tub-control.service || systemctl start hot-tub-control.service

echo ""
echo "Installation complete."
echo "  Repo / code root: ${INSTALL_ROOT}"
echo "  Config:           /etc/hot-tub/control.json"
echo "  State:            /var/lib/hot-tub/control-state.json"
echo "  Log:              /var/log/hot-tub/control.log"
echo ""
echo "Do not run src/control_poc.py while this service is active (same GPIO pins)."
echo ""
echo "Status:  systemctl status hot-tub-control"
echo "Logs:    tail -f /var/log/hot-tub/control.log"
echo "Redis:   redis-cli GET control:latest"
