#!/usr/bin/env bash
# Deploy the tracker as an independent Docker Compose project on the Hetzner host.
# The existing LoreSpace Caddy instance remains the public edge; this script adds
# only one dedicated hostname route and rolls it back if Caddy validation fails.
set -euo pipefail

: "${RKT_DOMAIN:?Set RKT_DOMAIN, e.g. tracker.example.com}"
if [[ ! "$RKT_DOMAIN" =~ ^[A-Za-z0-9.-]+$ ]]; then
  echo "RKT_DOMAIN must be a hostname."
  exit 1
fi

APP_DIR=/opt/roaring-kitty-tracker
CADDY_REPO=/opt/lorespace/ontospace_tachyon
CADDY_FILE="$CADDY_REPO/deploy/caddy/Caddyfile"
CADDY_CONTAINER=lorespace-caddy
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

if [ "$PWD" != "$APP_DIR" ]; then
  echo "Run this from $APP_DIR after cloning the repository there."
  exit 1
fi
if ! docker network inspect ontospace_tachyon_default >/dev/null 2>&1; then
  echo "The shared Caddy Docker network is unavailable."
  exit 1
fi

docker compose -f deploy/docker-compose.yml build
docker compose -f deploy/docker-compose.yml up -d dashboard

sudo install -m 0644 "$SCRIPT_DIR/roaring-kitty-refresh-docker.service" /etc/systemd/system/roaring-kitty-refresh-docker.service
sudo install -m 0644 "$SCRIPT_DIR/roaring-kitty-refresh-docker.timer" /etc/systemd/system/roaring-kitty-refresh-docker.timer
sudo systemctl daemon-reload
sudo systemctl enable --now roaring-kitty-refresh-docker.timer

route_file="$(mktemp)"
sed "s/__RKT_DOMAIN__/${RKT_DOMAIN}/g" "$SCRIPT_DIR/Caddyfile.docker" > "$route_file"
backup_file="$(mktemp)"
cp "$CADDY_FILE" "$backup_file"

python3 - "$CADDY_FILE" "$route_file" <<'PY'
from pathlib import Path
import sys

caddyfile = Path(sys.argv[1])
route = Path(sys.argv[2]).read_text()
begin = "# BEGIN RoaringKitty Tracker"
end = "# END RoaringKitty Tracker"
text = caddyfile.read_text()

if begin in text:
    prefix, remainder = text.split(begin, 1)
    if end not in remainder:
        raise SystemExit("Existing RoaringKitty Caddy block has no end marker.")
    _, suffix = remainder.split(end, 1)
    text = prefix + suffix.lstrip("\n")

caddyfile.write_text(text.rstrip() + f"\n\n{begin}\n{route}{end}\n")
PY

if docker exec "$CADDY_CONTAINER" caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile; then
  docker exec "$CADDY_CONTAINER" caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile
else
  cp "$backup_file" "$CADDY_FILE"
  rm -f "$route_file" "$backup_file"
  echo "Caddy configuration was invalid; the previous configuration was restored."
  exit 1
fi

rm -f "$route_file" "$backup_file"
echo "Tracker deployed. Run the first refresh with:"
echo "  sudo systemctl start roaring-kitty-refresh-docker.service"
echo "Then verify: https://${RKT_DOMAIN}/healthz"
