#!/usr/bin/env bash
# Install crontab for Laravel schedule:run + ensure cron starts on boot.
# Usage:
#   bash scripts/install-local-cron.sh           # every 1 minute (default, Laravel standard)
#   SCHEDULE_MINUTES=3 bash scripts/install-local-cron.sh
set -euo pipefail

PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PHP_BIN="${PHP_BIN:-/opt/lampp/bin/php}"
SCHEDULE_MINUTES="${SCHEDULE_MINUTES:-1}"
MARKER="# app-main-updater-laravel-scheduler"
RUN_SCRIPT="${PROJECT_DIR}/scripts/run-scheduler.sh"

if [[ ! -x "${PHP_BIN}" ]]; then
  echo "PHP not found at ${PHP_BIN}. Set PHP_BIN=/path/to/php and retry." >&2
  exit 1
fi

chmod +x "${RUN_SCRIPT}"

case "${SCHEDULE_MINUTES}" in
  1) CRON_SCHEDULE="* * * * *" ;;
  2) CRON_SCHEDULE="*/2 * * * *" ;;
  3) CRON_SCHEDULE="*/3 * * * *" ;;
  5) CRON_SCHEDULE="*/5 * * * *" ;;
  *)
    echo "Unsupported SCHEDULE_MINUTES=${SCHEDULE_MINUTES} (use 1, 2, 3, or 5)" >&2
    exit 1
    ;;
esac

# Quote script path — required when project directory contains spaces (e.g. "App Main-Updater").
CRON_LINE="${CRON_SCHEDULE} \"${RUN_SCRIPT}\" ${MARKER}"
REBOOT_LINE="@reboot sleep 90 && \"${RUN_SCRIPT}\" ${MARKER}-boot"

mkdir -p "${PROJECT_DIR}/storage/logs"

if command -v systemctl >/dev/null 2>&1; then
  if systemctl list-unit-files cron.service >/dev/null 2>&1; then
    echo "Enabling cron.service on boot..."
    sudo systemctl enable cron.service 2>/dev/null || true
    sudo systemctl start cron.service 2>/dev/null || true
  elif systemctl list-unit-files crond.service >/dev/null 2>&1; then
    echo "Enabling crond.service on boot..."
    sudo systemctl enable crond.service 2>/dev/null || true
    sudo systemctl start crond.service 2>/dev/null || true
  fi
fi

EXISTING="$(crontab -l 2>/dev/null || true)"
FILTERED="$(printf '%s\n' "${EXISTING}" | grep -v "${MARKER}" | sed '/^$/d' || true)"
{
  printf '%s\n' "${FILTERED}"
  echo "${CRON_LINE}"
  echo "${REBOOT_LINE}"
} | crontab -

echo "Crontab installed (every ${SCHEDULE_MINUTES} minute(s) + once after reboot):"
crontab -l | grep "${MARKER}" || true
echo ""
echo "Test run (scheduler + moderation):"
bash "${RUN_SCRIPT}" || true
echo ""
echo "Last scheduler log lines:"
tail -5 "${PROJECT_DIR}/storage/logs/scheduler.log" 2>/dev/null || true
