#!/usr/bin/env bash
# bin/backup-cron.sh — déclenche le self-backup legacy (/admin/backup/cron)
# depuis la crontab, SANS que le token figure dans la ligne de crontab.
#
# Usage (crontab www-data) :
#   00 5 * * 1-6 /bin/bash $APP_MBC/bin/backup-cron.sh db   $URL_MBC >> $APP_LOG_MBC/backup.log 2>&1
#   00 5 * * 0   /bin/bash $APP_MBC/bin/backup-cron.sh full $URL_MBC >> $APP_LOG_MBC/backup.log 2>&1
# (APP_MBC=/var/www/html/mabellecave, URL_MBC et APP_LOG_MBC déjà définies
# dans la crontab ; horaires et délais repris des lignes curl d'origine :
# 600 s pour db, 1800 s pour full.)
#
# Le token est lu dans le .env du site au moment de l'appel, selon les mêmes
# règles que App\EnvLoader : surcharge <PLATEFORME>_BACKUP_CRON_TOKEN de la
# plateforme active (marqueur <P>.MD à la racine ; aucun marqueur = prod ;
# plusieurs = le non-dev l'emporte), sinon BACKUP_CRON_TOKEN global.
# Il est transmis à curl par l'entrée standard (`-H @-`) : il n'apparaît ni
# dans l'URL, ni dans les journaux d'accès Apache, ni dans `ps`.
#
# Toujours appelé via `/bin/bash` : site-deploy remet chaque fichier en 660 à
# chaque déploiement (deploy-chown), le bit exécutable ne survit donc pas.
# Seule la lecture par www-data est nécessaire.
set -euo pipefail

if [ "$#" -ne 2 ]; then
    echo "Usage: $0 db|full BASE_URL" >&2
    exit 2
fi

TYPE="$1"
BASE="${2%/}"
case "$TYPE" in
    db|full) ;;
    *) echo "Type invalide « $TYPE » (attendu : db ou full)" >&2; exit 2 ;;
esac
DELAI=600
[ "$TYPE" = full ] && DELAI=1800

RACINE="$(cd "$(dirname "$0")/.." && pwd)"
ENV_FILE="$RACINE/.env"
[ -r "$ENV_FILE" ] || { echo "Fichier .env illisible : $ENV_FILE" >&2; exit 1; }

# Plateforme active (même règle que EnvLoader::detectPlatform).
PLATEFORME=prod
if [ -f "$RACINE/DEV.MD" ] && [ ! -f "$RACINE/PROD.MD" ] && [ ! -f "$RACINE/OVH.MD" ]; then
    PLATEFORME=dev
elif [ -f "$RACINE/OVH.MD" ] && [ ! -f "$RACINE/PROD.MD" ]; then
    PLATEFORME=ovh
fi
PREFIXE="$(printf '%s' "$PLATEFORME" | tr '[:lower:]' '[:upper:]')_"

# lire_cle <CLE> : dernière valeur non commentée, espaces et guillemets retirés.
# Lecture par sed, jamais par `source` : un .env n'est pas du bash sûr.
lire_cle() {
    sed -n -E "s/^[[:space:]]*$1[[:space:]]*=[[:space:]]*(.*)$/\1/p" "$ENV_FILE" \
        | tail -n 1 \
        | sed -E 's/[[:space:]]+$//; s/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/'
}

TOKEN="$(lire_cle "${PREFIXE}BACKUP_CRON_TOKEN")"
[ -n "$TOKEN" ] || TOKEN="$(lire_cle BACKUP_CRON_TOKEN)"
if [ -z "$TOKEN" ]; then
    echo "BACKUP_CRON_TOKEN absent ou vide dans $ENV_FILE" >&2
    exit 1
fi

printf 'X-Cron-Token: %s\n' "$TOKEN" \
    | curl -fsS --max-time "$DELAI" -H @- "$BASE/admin/backup/cron?type=$TYPE"
