#!/usr/bin/env bash
# Met à jour ACF PRO en production via Composer (cron o2switch).
#
# Prérequis sur le serveur :
#   - composer.json + composer.lock dans $ROOT
#   - ~/.secrets/auth.json (http-basic connect.advancedcustomfields.com)
#
# Cron recommandé (lundi 07:00 UTC) :
#   0 7 * * 1 bash /home/sc1mear8437/public_html/scripts/update-acf-pro-server.sh >> /home/sc1mear8437/logs/acf-update.log 2>&1
#
# Variables optionnelles :
#   ACF_UPDATE_ROOT, ACF_AUTH_FILE, ACF_LOG_DIR, ACF_LOCK_DIR

set -euo pipefail

ROOT="${ACF_UPDATE_ROOT:-/home/sc1mear8437/public_html}"
AUTH_FILE="${ACF_AUTH_FILE:-/home/sc1mear8437/.secrets/auth.json}"
LOG_DIR="${ACF_LOG_DIR:-/home/sc1mear8437/logs}"
LOCK_DIR="${ACF_LOCK_DIR:-/home/sc1mear8437/tmp}"
PACKAGE="wpengine/advanced-custom-fields-pro"
PLUGIN_PHP="$ROOT/www/wp-content/plugins/advanced-custom-fields-pro/acf.php"
LOCK_FILE="$LOCK_DIR/acf-update.lock"

mkdir -p "$LOG_DIR" "$LOCK_DIR"

if ! mkdir "$LOCK_FILE" 2>/dev/null; then
  echo "$(date -Is) → Mise à jour ACF déjà en cours, ignorée."
  exit 0
fi
trap 'rmdir "$LOCK_FILE" 2>/dev/null || true' EXIT

if ! command -v composer >/dev/null 2>&1; then
  echo "$(date -Is) → Composer introuvable." >&2
  exit 1
fi

if [[ ! -f "$AUTH_FILE" ]]; then
  echo "$(date -Is) → auth.json introuvable : $AUTH_FILE" >&2
  exit 1
fi

if [[ ! -f "$ROOT/composer.json" ]]; then
  echo "$(date -Is) → composer.json introuvable dans $ROOT" >&2
  exit 1
fi

cd "$ROOT"
export COMPOSER_AUTH="$(cat "$AUTH_FILE")"

current_version() {
  if [[ -f "$PLUGIN_PHP" ]]; then
    grep -m1 'Version:' "$PLUGIN_PHP" | sed -E 's/.*Version:[[:space:]]*//; s/[[:space:]]*\*\/.*//; s/^[[:space:]]*//; s/[[:space:]]*$//'
  else
    echo "absent"
  fi
}

BEFORE="$(current_version)"
echo "$(date -Is) → ACF PRO avant : ${BEFORE}"

composer install --no-interaction --no-dev --no-ansi 2>&1
composer update "$PACKAGE" --no-interaction --with-all-dependencies --no-ansi 2>&1

AFTER="$(current_version)"
echo "$(date -Is) → ACF PRO après : ${AFTER}"

if [[ "$BEFORE" == "$AFTER" ]]; then
  echo "$(date -Is) → Aucun changement."
else
  echo "$(date -Is) → Mise à jour appliquée (${BEFORE} → ${AFTER})."
fi
