#!/bin/bash

# ==========================================
# Script de traitement de la queue Laravel
# À placer par exemple dans : /home/xxxnnnn/scripts/process-queue.sh
# ==========================================

# --- Configuration ---
APP_PATH="~/go/simonevertego"
PHP_BIN="php"     # adapte selon ta version PHP OVH
LOCK_FILE="~/go/tmp/laravel-queue-xxxnnnn.lock"
LOG_FILE="$APP_PATH/storage/logs/worker.log"
MAX_LOG_SIZE=5242880                     # 5 Mo, pour la rotation manuelle

# --- Vérifications de base ---
if [ ! -d "$APP_PATH" ]; then
    echo "$(date '+%Y-%m-%d %H:%i:%S') - ERREUR: APP_PATH introuvable ($APP_PATH)" >> "$LOG_FILE"
    exit 1
fi

if [ ! -x "$PHP_BIN" ]; then
    echo "$(date '+%Y-%m-%d %H:%i:%S') - ERREUR: PHP introuvable ou non exécutable ($PHP_BIN)" >> "$LOG_FILE"
    exit 1
fi

# --- Rotation basique du log si trop gros ---
if [ -f "$LOG_FILE" ] && [ "$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0)" -gt "$MAX_LOG_SIZE" ]; then
    mv "$LOG_FILE" "$LOG_FILE.$(date +%Y%m%d%H%M%S).old"
fi

# Empêche 2 exécutions simultanées (si jamais le cron se chevauche)
exec 9>"$LOCK_FILE"
flock -n 9 || { echo "$(date) - Déjà en cours, on quitte." >> "$LOG_FILE"; exit 0; }

END_TIME=$(( $(date +%s) + 2700 ))   # 45 minutes, marge de sécurité avant le prochain cron

cd "$APP_PATH" || exit 1

while [ "$(date +%s)" -lt "$END_TIME" ]; do
    "$PHP_BIN" artisan queue:work \
        --stop-when-empty \
        --tries=3 \
        --timeout=50 \
        --sleep=1 \
        --max-time=50 \
        >> "$LOG_FILE" 2>&1

    sleep 5   # petite pause avant de re-checker la queue
done

echo "$(date) - Boucle terminée, en attente du prochain cron." >> "$LOG_FILE"