#!/usr/bin/env bash
# Install systemd unit for EtherGold production supervisor (Pi boot).
#
# Usage (on Pi, after deploy):
#   sudo bash install_prod_service.sh
#   sudo env FIXTURE_POS=1 bash install_prod_service.sh
#
# Full field commissioning:
#   sudo bash commission_prod_boot.sh
#   sudo env ETHERGOLD_ROLE=topbox bash commission_prod_boot.sh
#
# Manual override:
#   sudo bash disable_prod.sh / enable_prod.sh / uninstall_prod.sh

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

POS="${FIXTURE_POS:-1}"
if ! [[ "${POS}" =~ ^[1-9][0-9]?$ ]]; then
  echo "WARN: FIXTURE_POS invalid (${POS}); using 1 for log/socket routing only" >&2
  POS=1
fi
HOST_LABEL="$(hostname)"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=ethergold_field_env.sh
source "${SCRIPT_DIR}/ethergold_field_env.sh"
if [[ -f "${SCRIPT_DIR}/../sync/ethergold_paths.sh" ]]; then
  # shellcheck source=../sync/ethergold_paths.sh
  source "${SCRIPT_DIR}/../sync/ethergold_paths.sh"
elif [[ -f "${SCRIPT_DIR}/../../sync/ethergold_paths.sh" ]]; then
  # shellcheck source=../../sync/ethergold_paths.sh
  source "${SCRIPT_DIR}/../../sync/ethergold_paths.sh"
else
  # shellcheck source=/dev/null
  source "${HOME}/EtherGold/sync/ethergold_paths.sh"
fi

EDGE_EXAMPLE="${SCRIPT_DIR}/pog-edge/edge.env.example"
SUP_LOG="${ETHERGOLD_LOGS}/supervisor.log"
SUPERVISOR_PY="${ETHERGOLD_DAEMON}/ethergold_supervisor.py"
if [[ ! -f "${SUPERVISOR_PY}" ]]; then
  SUPERVISOR_PY="${ETHERGOLD_DAEMON}/fixture_supervisor.py"
fi

ethergold_migrate_legacy_paths
sudo mkdir -p "${ETHERGOLD_ETC}" "${ETHERGOLD_VAR}" "${ETHERGOLD_LOGS}"

{
  echo "FIXTURE_POS=${POS}"
  echo "CHANNEL=${CHANNEL:-both}"
  echo "POG422_UARTD=${POG422_UARTD:-1}"
  echo "POG422_UARTD_INJECT=${POG422_UARTD_INJECT:-1}"
  echo "FIXTURE_STATUS_LED=${FIXTURE_STATUS_LED:-1}"
} | sudo tee "${ETHERGOLD_ENV_FILE}" >/dev/null

if [[ ! -f "${ETHERGOLD_EDGE_ENV}" ]]; then
  if [[ -f "${EDGE_EXAMPLE}" ]]; then
    sudo cp "${EDGE_EXAMPLE}" "${ETHERGOLD_EDGE_ENV}"
  else
    echo "EDGE_MODE=0" | sudo tee "${ETHERGOLD_EDGE_ENV}" >/dev/null
  fi
fi

if [[ ! -f "${ETHERGOLD_ROLE_FILE}" ]]; then
  echo "ETHERGOLD_ROLE=topbox" | sudo tee "${ETHERGOLD_ROLE_FILE}" >/dev/null
fi

sudo bash "${SCRIPT_DIR}/install_edge_sudoers.sh" || true

ethergold_stop_unit "${ETHERGOLD_COLLECTOR_UNIT}"
ethergold_stop_unit "${ETHERGOLD_COLLECTOR_UNIT_LEGACY}"
for pattern in pog422_fixture_listen ethergold_listen_supervisor fixture_listen_supervisor; do
  pkill -TERM -f "${pattern}" 2>/dev/null || true
done
sleep 1

sudo tee "/etc/systemd/system/${ETHERGOLD_UNIT}" >/dev/null <<EOF
[Unit]
Description=EtherGold production supervisor (${HOST_LABEL})
After=local-fs.target systemd-udev-settle.service
# ETH optional at boot — supervisor waits for carrier internally.

[Service]
Type=simple
EnvironmentFile=${ETHERGOLD_ENV_FILE}
EnvironmentFile=-${ETHERGOLD_ROLE_FILE}
EnvironmentFile=-${ETHERGOLD_EDGE_ENV}
Environment=ETHERGOLD_ROOT=${ETHERGOLD_ROOT}
Environment=ETHERGOLD_BRIDGE=${ETHERGOLD_BRIDGE}
Environment=ETHERGOLD_DAEMON=${ETHERGOLD_DAEMON}
Environment=ETHERGOLD_LOGS=${ETHERGOLD_LOGS}
Environment=ETHERGOLD_REAL_USER=topbox
Environment=ETHERGOLD_DISABLE_FILE=${ETHERGOLD_DISABLE_FILE}
User=topbox
Group=topbox
WorkingDirectory=${ETHERGOLD_DAEMON}
# CPUAffinity for EG lane also installed via install_cpu_affinity.sh drop-in.
ExecStart=/usr/bin/python3 ${SUPERVISOR_PY} --fixture-pos ${POS} --log ${SUP_LOG}
Restart=always
RestartSec=5
StartLimitIntervalSec=0
# Manual disable without uninstall: touch ${ETHERGOLD_DISABLE_FILE}

[Install]
WantedBy=multi-user.target
# Compat alias for one release (systemctl start fixture-prod may still resolve after symlink)
EOF

# Compat symlink so old operator muscle-memory works during cutover
sudo ln -sfn "${ETHERGOLD_UNIT}" "/etc/systemd/system/${ETHERGOLD_UNIT_LEGACY}" 2>/dev/null || true

if [[ -f "${SCRIPT_DIR}/install_cpu_affinity.sh" ]]; then
  sudo bash "${SCRIPT_DIR}/install_cpu_affinity.sh" || true
fi

sudo systemctl daemon-reload
sudo systemctl enable "${ETHERGOLD_UNIT}"
sudo rm -f "${ETHERGOLD_DISABLE_FILE}" "${ETHERGOLD_VAR_LEGACY}/disabled"
sudo systemctl restart "${ETHERGOLD_UNIT}"
echo "Installed and started ${ETHERGOLD_UNIT} for ${HOST_LABEL} (headless, position-free)"
systemctl status "${ETHERGOLD_UNIT}" --no-pager || true
