#!/usr/bin/env bash
# Wrapper script for Laravel artisan cron job
# Purpose: run Laravel scheduler (php artisan schedule:run) safely once/minute from system cron

set -euo pipefail
IFS=$'\n\t'

# Config
APP_ROOT="/home/swmsdepoter/public_html/backend"
LOGDIR="$APP_ROOT/storage/logs"
LOCK="/tmp/laravel-scheduler.lock"
PHP="/usr/local/bin/php"          # adjust if php lives elsewhere
LOG_DAILY="$LOGDIR/soa-cron-$(date +%F).log"
STATUS_LOG="$LOGDIR/cron-status.log"
ENV_DUMP="$LOGDIR/soa-cron-env-$(date +%F-%H%M%S).log"
KEEP_DAYS=14                      # keep daily logs for this many days

mkdir -p "$LOGDIR"

# Optional: dump environment for debugging (uncomment if needed)
# env > "$ENV_DUMP"
# echo "UID: $(id)" >> "$ENV_DUMP"

# Acquire lock (prevents overlapping wrapper invocations)
exec 9>"$LOCK"
if ! /usr/bin/flock -n 9; then
  echo "[$(date +'%F %T')] Scheduler already running (flock) — exiting." >> "$LOG_DAILY"
  exit 0
fi

# Move to project root, bail with log if fails
if ! cd "$APP_ROOT"; then
  echo "[$(date +'%F %T')] Failed to cd $APP_ROOT" >> "$LOG_DAILY"
  exit 2
fi

# Ensure PHP binary exists
if [ ! -x "$PHP" ]; then
  echo "[$(date +'%F %T')] PHP binary not found/executable at $PHP" >> "$LOG_DAILY"
  exit 3
fi

# Run scheduler (this will run all scheduled tasks that are due)
# Use environment variable APP_ENV if needed: APP_ENV=production $PHP artisan schedule:run
START_TS="$(date +'%F %T')"
echo "[$START_TS] Running: $PHP artisan schedule:run" >> "$LOG_DAILY"

# Run and capture exit code
# Redirect both stdout and stderr to daily log
"$PHP" artisan schedule:run >> "$LOG_DAILY" 2>&1
RC=$?

END_TS="$(date +'%F %T')"
echo "[$END_TS] Finished run; exit code: $RC" >> "$LOG_DAILY"
echo "[$END_TS] Last run exit:$RC started:$START_TS ended:$END_TS" >> "$STATUS_LOG"

# Simple log rotation: delete daily logs older than KEEP_DAYS
find "$LOGDIR" -type f -name "soa-cron-*.log" -mtime +"$KEEP_DAYS" -delete || true

exit $RC
