#!/bin/bash
# Procesa jobs JSON dejados por bewpro-provision.php
# Crontab root: * * * * * /root/scripts/process_provision_queue.sh
#
# Config (via /root/scripts/.airtable.env o env directo):
#   QUEUE_DIR  → directorio donde bewpro-provision.php deposita los .json jobs
#                Default histórico: /home/resellerprueba2/provision_queue
#                Recomendación nueva: /var/spool/bewpro/queue (no atado a un tenant específico)
#   SETUP_SCRIPT → setup script a invocar. Default: /root/scripts/setup_cd_project2.sh
set -euo pipefail

# Cargar config opcional desde .airtable.env (fuente de verdad de paths)
if [[ -f /root/scripts/.airtable.env ]]; then
    # shellcheck disable=SC1091
    source /root/scripts/.airtable.env
fi

QUEUE_DIR="${QUEUE_DIR:-/home/resellerprueba2/provision_queue}"
SCRIPT="${SETUP_SCRIPT:-/root/scripts/setup_cd_project2.sh}"

shopt -s nullglob
if [[ ! -d "$QUEUE_DIR" ]]; then
    # Si el directorio no existe, NO crear silenciosamente (evita oscurecer drift).
    # Loguear una vez por hora para que el operador note.
    LOCK="/tmp/process_provision_queue.missing-dir.last"
    NOW=$(date +%s)
    LAST=$(cat "$LOCK" 2>/dev/null || echo 0)
    if (( NOW - LAST > 3600 )); then
        echo "[$(date -Iseconds)] WARN: QUEUE_DIR=$QUEUE_DIR no existe — script no procesa nada" >&2
        echo "$NOW" > "$LOCK"
    fi
    exit 0
fi

read_json() {
  local key="$1" file="$2"
  python3 -c "import json,sys; d=json.load(open(sys.argv[1])); print(d.get(sys.argv[2], '') or '')" "$file" "$key" 2>/dev/null || true
}

for job_file in "$QUEUE_DIR"/*.json; do
  [[ -f "$job_file" ]] || continue
  [[ "$job_file" == *.processing ]] && continue
  [[ "$job_file" == *.done ]] && continue

  BASE_NAME=$(read_json base_name "$job_file")
  [[ -z "$BASE_NAME" ]] && { rm -f "$job_file"; continue; }

  proc="${job_file}.processing"
  mv "$job_file" "$proc"

  EMAIL=$(read_json email "$proc")
  TITLE=$(read_json title "$proc")
  PRODUCT=$(read_json product "$proc")
  PASSWORD=$(read_json password "$proc")
  APP_URL=$(read_json app_url "$proc")
  SOURCE_DB=$(read_json source_db "$proc")
  LOG_FILE=$(read_json log_file "$proc")
  [[ -z "$LOG_FILE" ]] && LOG_FILE="/tmp/provision_${BASE_NAME}_$(date +%s).log"

  {
    echo "=== Job $(basename "$proc") ==="
    echo "base=$BASE_NAME source_db=${SOURCE_DB:-<vacío>} app_url=${APP_URL:-<default script>}"
  } >>"$LOG_FILE"

  set +e
  bash "$SCRIPT" \
    "$BASE_NAME" \
    "$EMAIL" \
    "$TITLE" \
    "$PRODUCT" \
    "$PASSWORD" \
    "$APP_URL" \
    "$SOURCE_DB" \
    >>"$LOG_FILE" 2>&1
  rc=$?
  set -e

  mv "$proc" "${proc%.processing}.done"
  echo "[$(date -Iseconds)] base=$BASE_NAME exit=$rc log=$LOG_FILE" >>"$QUEUE_DIR/queue.log"
done
