#!/usr/bin/env bash
set -euo pipefail

BASE="${1:-/srv/geneacase}"
ENV_FILE="$BASE/shared/.env"
BACKUP_DIR="$BASE/shared/backups"
STAMP="$(date -u +%Y%m%d_%H%M%S)"

if [[ ! -f "$ENV_FILE" ]]; then
  echo "[ERROR] Falta $ENV_FILE" >&2
  exit 1
fi

set -a
# shellcheck disable=SC1090
source "$ENV_FILE"
set +a

: "${DB_HOST:?DB_HOST requerido}"
: "${DB_PORT:?DB_PORT requerido}"
: "${DB_DATABASE:?DB_DATABASE requerido}"
: "${DB_USERNAME:?DB_USERNAME requerido}"

mkdir -p "$BACKUP_DIR"
chmod 750 "$BACKUP_DIR"

TARGET="$BACKUP_DIR/geneacase_${STAMP}.sql.gz"
MYSQL_PWD="${DB_PASSWORD:-}" mysqldump \
  --host="$DB_HOST" \
  --port="$DB_PORT" \
  --user="$DB_USERNAME" \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --hex-blob \
  --default-character-set=utf8mb4 \
  "$DB_DATABASE" | gzip -9 > "$TARGET"

test -s "$TARGET"
chmod 600 "$TARGET"
sha256sum "$TARGET" > "$TARGET.sha256"
chmod 600 "$TARGET.sha256"

RETENTION="${BACKUP_RETENTION_DAYS:-30}"
find "$BACKUP_DIR" -type f -name 'geneacase_*.sql.gz' -mtime "+$RETENTION" -delete
find "$BACKUP_DIR" -type f -name 'geneacase_*.sql.gz.sha256' -mtime "+$RETENTION" -delete

echo "[OK] Backup creado: $TARGET"
