#!/usr/bin/env bash
# Laravel scheduler — invoked from crontab (path must be quoted if it contains spaces).
set -euo pipefail

PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PHP_BIN="${PHP_BIN:-/opt/lampp/bin/php}"
LOG_FILE="${PROJECT_DIR}/storage/logs/scheduler.log"
ENV_FILE="${PROJECT_DIR}/.env"

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "${LOG_FILE}" 2>&1 || true
}

if [[ ! -x "${PHP_BIN}" ]]; then
  log "PHP missing: ${PHP_BIN}"
  exit 1
fi

read_db_target() {
  DB_HOST="127.0.0.1"
  DB_PORT="3306"
  if [[ -f "${ENV_FILE}" ]]; then
    local h p
    h="$(grep -E '^DB_HOST=' "${ENV_FILE}" | tail -1 | cut -d= -f2- | tr -d "\"' " || true)"
    p="$(grep -E '^DB_PORT=' "${ENV_FILE}" | tail -1 | cut -d= -f2- | tr -d "\"' " || true)"
    [[ -n "${h}" ]] && DB_HOST="${h}"
    [[ -n "${p}" ]] && DB_PORT="${p}"
  fi
}

mysql_port_open() {
  read_db_target
  if command -v nc >/dev/null 2>&1; then
    nc -z "${DB_HOST}" "${DB_PORT}" 2>/dev/null
    return $?
  fi
  timeout 2 bash -c "cat < /dev/null > /dev/tcp/${DB_HOST}/${DB_PORT}" 2>/dev/null
}

mysql_ready() {
  if mysql_port_open; then
    return 0
  fi
  local lampp="${LAMPP:-/opt/lampp/lampp}"
  if [[ -x "${lampp}" ]] && "${lampp}" status 2>/dev/null | grep -q "MySQL is running"; then
    return 0
  fi
  return 1
}

if ! mysql_ready; then
  log "skipped: database not reachable (${DB_HOST:-127.0.0.1}:${DB_PORT:-3306})"
  exit 0
fi

cd "${PROJECT_DIR}"
mkdir -p storage/logs storage/framework/cache/data
chmod -R ug+rwX storage/framework/cache storage/logs 2>/dev/null || true

{
  log "schedule:run"
  "${PHP_BIN}" artisan schedule:run --no-interaction 2>&1

  log "listings:process-moderation"
  "${PHP_BIN}" artisan listings:process-moderation --no-interaction 2>&1
} >> "${LOG_FILE}" 2>&1
