#!/usr/bin/env bash
#
# paas-laravel-scheduler — systemd timer entry point (every minute, user deploy).
# Runs `php artisan schedule:run` for every registry app with RUNTIME=laravel
# and SCHEDULER=on that has a live release. Apps run concurrently; a per-app
# flock keeps a slow tick from piling up runners (task-level overlap is the
# app's own `withoutOverlapping()`). Output goes to shared/storage/logs/scheduler.log.

set -uo pipefail

PAAS_ROOT="${PAAS_ROOT:-/srv/paas}"
APPS_ROOT="${APPS_ROOT:-/srv/apps}"
REG_DIR="$PAAS_ROOT/apps.d"
# shellcheck disable=SC1091
[[ -f "$PAAS_ROOT/paas.conf" ]] && source "$PAAS_ROOT/paas.conf"
PHP_DEFAULT="${PHP_DEFAULT:-8.3}"

for conf in "$REG_DIR"/*.conf; do
    [[ -e "$conf" ]] || continue
    (
        APP=''; RUNTIME=node; SCHEDULER=off; PHP_VERSION=''
        # shellcheck disable=SC1090
        source "$conf"
        [[ "$RUNTIME" == "laravel" && "$SCHEDULER" == "on" && -n "$APP" ]] || exit 0
        app_dir="$APPS_ROOT/$APP"
        [[ -d "$app_dir/current" ]] || exit 0
        php="/usr/bin/php${PHP_VERSION:-$PHP_DEFAULT}"
        [[ -x "$php" ]] || { echo "[$APP] $php missing" >&2; exit 1; }
        logdir="$app_dir/shared/storage/logs"
        mkdir -p "$logdir"
        cd "$app_dir/current" || exit 1
        exec flock -n "$app_dir/shared/.schedule.lock" \
            env PATH="$PAAS_ROOT/php/bin/${PHP_VERSION:-$PHP_DEFAULT}:$PATH" \
            "$php" artisan schedule:run --no-interaction --no-ansi >>"$logdir/scheduler.log" 2>&1
    ) &
done
wait
