#!/usr/bin/env bash
# Pi watchdog — restart DyzineFrame on crash; rollback after consecutive rapid crashes.
# Disable: touch ~/DyzineFrame/run/watchdog.disabled

if [[ "$EUID" -eq 0 ]]; then
    echo "DO NOT RUN AS ROOT!"
    exit 1
fi

cd "$(dirname "$0")" || exit 1
mkdir -p ./run ./log

# config.ini owned by root kills Heltec USB (/asset persist PermissionError).
# Timeout + || true: must not block HDMI if sudo -n is missing.
if [[ -f ./config.ini ]]; then
    timeout 8 sudo -n chown topbox:topbox ./config.ini >/dev/null 2>&1 || true
    timeout 8 sudo -n chmod 664 ./config.ini >/dev/null 2>&1 || true
fi

# OTA DF promote never re-runs install_script.sh. Re-apply kiosk desktop harden
# each supervisor start (nm-applet / POGCOM auth popup). Timeout: must not block HDMI.
if [[ "$(uname -s)" == "Linux" && -x ./harden_pi_desktop.sh ]]; then
    timeout 25 bash ./harden_pi_desktop.sh >>./log/harden_pi_desktop.log 2>&1 || true
fi

export DYZINEFRAME_ROLLBACK_ROOT="${DYZINEFRAME_ROLLBACK_ROOT:-${HOME}/DyzineFrame-Rollback}"
export DYZINEFRAME_CRASH_BACKOFF_SEC="${DYZINEFRAME_CRASH_BACKOFF_SEC:-300}"
export DYZINEFRAME_RAPID_CRASH_SEC="${DYZINEFRAME_RAPID_CRASH_SEC:-30}"
export DYZINEFRAME_BOOT_DELAY_SEC="${DYZINEFRAME_BOOT_DELAY_SEC:-15}"

# Pin supervisor + child DF starts to render cores (cpu_affinity.sh).
# Off: run/cpu_affinity.disabled (HDMI Supervisor CPU pin → Disable).
# shellcheck source=cpu_affinity.sh
if [[ -f ./cpu_affinity.sh ]]; then
  # shellcheck disable=SC1091
  source ./cpu_affinity.sh
  if type ohd_df_exec >/dev/null 2>&1; then
    ohd_df_exec python3 ./dyzineframe_supervisor.py --boot-delay "${DYZINEFRAME_BOOT_DELAY_SEC}"
  fi
fi
exec python3 ./dyzineframe_supervisor.py --boot-delay "${DYZINEFRAME_BOOT_DELAY_SEC}"
