#!/bin/bash
# scripts/run.sh — Master nightly run (VOD sync + live prep)
#
# Cron: 0 2 * * *
# Order:
#   1. VOD sync  (Process.php → genFeed.php)
#   2. Live prep (generate_daily_plan.php → encode_videos.sh → gen_banners.py)

SCRIPT_DIR="/var/www/html/media/scripts"
BASE_DIR="/var/www/html/media"
LOG_DIR="$BASE_DIR/logs"
LOG_FILE="$LOG_DIR/run.log"
LOCK_FILE="$LOG_DIR/run.lock"
LOCK_FD=9

# ── Acquire lock ──────────────────────────────────────────────────────────────
eval "exec $LOCK_FD>\"$LOCK_FILE\""
if ! flock -n $LOCK_FD; then
    pid=$(cat "$LOCK_FILE" 2>/dev/null)
    echo "$(date -u '+%Y-%m-%d %H:%M:%S UTC') run.sh already running (PID ${pid:-unknown}), exiting."
    exit 1
fi
echo $$ > "$LOCK_FILE"

cleanup() {
    flock -u $LOCK_FD
    rm -f "$LOCK_FILE"
}
trap cleanup EXIT

# ── Logging ───────────────────────────────────────────────────────────────────
mkdir -p "$LOG_DIR"
> "$LOG_FILE"
> "$LOG_DIR/error.log"
chmod 664 "$LOG_FILE" "$LOG_DIR/error.log" 2>/dev/null || true

log() { echo "$(date -u '+%Y-%m-%d %H:%M:%S UTC') $*" | tee -a "$LOG_FILE"; }

log "run.sh started (PID $$)"

cd "$SCRIPT_DIR" || { log "ERROR: cannot cd to $SCRIPT_DIR"; exit 1; }

sudo rm -rf tmp/
mkdir -p tmp

# ── 1. VOD sync ───────────────────────────────────────────────────────────────
log "---- Process.php ----"
php "$SCRIPT_DIR/Process.php" >> "$LOG_FILE" 2>&1

log "---- genFeed.php ----"
php "$SCRIPT_DIR/genFeed.php" Primary >> "$LOG_FILE" 2>&1

# ── 2. Live prep ──────────────────────────────────────────────────────────────
log "---- generate_daily_plan.php ----"
php "$SCRIPT_DIR/generate_daily_plan.php" >> "$LOG_FILE" 2>&1
plan_rc=$?
[ $plan_rc -eq 0 ] && log "generate_daily_plan.php OK" || log "WARN: generate_daily_plan.php exited $plan_rc"

log "---- encode_videos.sh ----"
bash "$SCRIPT_DIR/encode_videos.sh" >> "$LOG_FILE" 2>&1
encode_rc=$?
[ $encode_rc -eq 0 ] && log "encode_videos.sh OK" || log "WARN: encode_videos.sh exited $encode_rc"

log "---- gen_banners.py ----"
python3 "$SCRIPT_DIR/gen_banners.py" --banners >> "$LOG_FILE" 2>&1

# ── Export crontab for status page ───────────────────────────────────────────
crontab -l 2>/dev/null > "$BASE_DIR/data/crontab.txt" || true

# ── Archive log ───────────────────────────────────────────────────────────────
cp "$LOG_FILE" "$LOG_DIR/run-$(date -u '+%Y-%m-%d').log"

# ── Purge old logs (keep 15 days) ─────────────────────────────────────────────
find "$LOG_DIR" -name 'run-*.log'      -mtime +15 -delete
find "$LOG_DIR" -name 'live-run-*.log' -mtime +15 -delete
# Rotate stream.log: drop entries older than 15 days
if [ -f "$LOG_DIR/stream.log" ]; then
    cutoff=$(date -u -d '15 days ago' '+%Y-%m-%d')
    awk -v cutoff="$cutoff" '$1 >= cutoff' "$LOG_DIR/stream.log" > "$LOG_DIR/stream.log.tmp" \
        && mv "$LOG_DIR/stream.log.tmp" "$LOG_DIR/stream.log"
fi

log "run.sh done"
