#!/usr/bin/env bash
# Install user systemd timers: hourly stage, 03:00 promote.
#
#   bash install_pi_deploy_schedule.sh
#   bash install_pi_deploy_schedule.sh --uninstall
#
# Requires: loginctl enable-linger topbox (run once as root) so timers run without login.

if grep -q $'\r' "${BASH_SOURCE[0]}" 2>/dev/null; then
  sed -i 's/\r$//' "${BASH_SOURCE[0]}"
  exec bash "${BASH_SOURCE[0]}" "$@"
fi

set -euo pipefail

if [[ "$(id -un)" == root ]]; then
  echo "FATAL: run as topbox, not root." >&2
  exit 1
fi

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
USER_SYSTEMD="${HOME}/.config/systemd/user"
LOG_DIR="${HOME}/DyzineFrame/log"
mkdir -p "${USER_SYSTEMD}" "${LOG_DIR}"

write_unit() {
  local name="$1"
  local body="$2"
  printf '%s\n' "${body}" > "${USER_SYSTEMD}/${name}"
}

if [[ "${1:-}" == "--uninstall" ]]; then
  systemctl --user disable --now dyzineframe-stage.timer dyzineframe-promote.timer 2>/dev/null || true
  rm -f \
    "${USER_SYSTEMD}/dyzineframe-stage.service" \
    "${USER_SYSTEMD}/dyzineframe-stage.timer" \
    "${USER_SYSTEMD}/dyzineframe-promote.service" \
    "${USER_SYSTEMD}/dyzineframe-promote.timer"
  systemctl --user daemon-reload
  echo "Removed DyzineFrame deploy timers."
  exit 0
fi

write_unit "dyzineframe-stage.service" "[Unit]
Description=DyzineFrame — stage from Dropbox (incremental)

[Service]
Type=oneshot
WorkingDirectory=${ROOT}
Environment=QUIET=1
Environment=LOG_OFFLOAD_PRODUCT=dyzineframe
ExecStart=/bin/bash ${ROOT}/stage_from_dropbox.sh
ExecStart=/bin/bash ${ROOT}/log_offload.sh
StandardOutput=append:${LOG_DIR}/stage.log
StandardError=append:${LOG_DIR}/stage.log"

write_unit "dyzineframe-stage.timer" "[Unit]
Description=Hourly DyzineFrame staging from Dropbox

[Timer]
OnCalendar=hourly
Persistent=true
Unit=dyzineframe-stage.service

[Install]
WantedBy=timers.target"

write_unit "dyzineframe-promote.service" "[Unit]
Description=DyzineFrame — promote staging at 03:00

[Service]
Type=oneshot
WorkingDirectory=${ROOT}
Environment=PROMOTE_RESTART=1
ExecStart=/bin/bash ${ROOT}/promote_staging.sh
StandardOutput=append:${LOG_DIR}/promote.log
StandardError=append:${LOG_DIR}/promote.log"

write_unit "dyzineframe-promote.timer" "[Unit]
Description=Daily 03:00 America/St_Thomas DyzineFrame promote (if staging-pending)

[Timer]
OnCalendar=*-*-* 03:00:00
Timezone=America/St_Thomas
Persistent=true
Unit=dyzineframe-promote.service

[Install]
WantedBy=timers.target"

if [[ -f "${ROOT}/install_http_date_sync.sh" ]]; then
  bash "${ROOT}/install_http_date_sync.sh" || echo "WARN: HTTP date timer not installed (need sudo -n)" >&2
fi

systemctl --user daemon-reload
systemctl --user enable --now dyzineframe-stage.timer dyzineframe-promote.timer

echo "Enabled:"
systemctl --user list-timers 'dyzineframe-*' --no-pager || true
echo ""
echo "Logs: ${LOG_DIR}/stage.log  ${LOG_DIR}/promote.log"
echo ""
if ! loginctl show-user "$(id -un)" -p Linger 2>/dev/null | grep -q 'Linger=yes'; then
  echo "IMPORTANT — run once as root so timers work without desktop login:"
  echo "  sudo loginctl enable-linger $(id -un)"
fi
