#!/usr/bin/env bash
# Install Redis + Supervisor and run Truck-Me Celery worker/beat under Supervisor.
# Run on the server as root: sudo bash deploy/install-celery-supervisor.sh
set -euo pipefail

PROJECT_DIR="${PROJECT_DIR:-/var/www/html/truck-me}"
SUPERVISOR_CONF_SRC="${PROJECT_DIR}/deploy/supervisor/truck-me-celery.conf"
SUPERVISOR_CONF_DST="/etc/supervisor/conf.d/truck-me-celery.conf"
LOG_DIR="/var/log/truck-me"
RUN_DIR="${PROJECT_DIR}/run"

echo "==> Installing Redis and Supervisor..."
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y redis-server supervisor

echo "==> Enabling Redis..."
systemctl enable redis-server
systemctl start redis-server
redis-cli ping | grep -q PONG

echo "==> Preparing directories and permissions..."
mkdir -p "${LOG_DIR}" "${RUN_DIR}"
chown -R www-data:www-data "${LOG_DIR}" "${RUN_DIR}"
chmod 750 "${LOG_DIR}" "${RUN_DIR}"
chmod +x "${PROJECT_DIR}/deploy/scripts/"*.sh

echo "==> Disabling systemd Celery units (if present)..."
for unit in celery-worker celery-beat; do
  if systemctl list-unit-files "${unit}.service" --no-legend 2>/dev/null | grep -q enabled; then
    systemctl stop "${unit}.service" || true
    systemctl disable "${unit}.service" || true
    echo "    disabled ${unit}.service"
  fi
done

echo "==> Installing Supervisor program config..."
cp "${SUPERVISOR_CONF_SRC}" "${SUPERVISOR_CONF_DST}"
supervisorctl reread
supervisorctl update

echo "==> Starting Celery programs..."
supervisorctl start truck-me-celery:*

echo ""
echo "Status:"
supervisorctl status truck-me-celery:*

echo ""
echo "Done. Logs: ${LOG_DIR}/celery-worker.log, ${LOG_DIR}/celery-beat.log"
echo "Manage: supervisorctl status|restart truck-me-celery:*"
