#!/bin/sh
# =====================================================================
# Backup diario de Fusión 4x4 — base de datos + archivos subidos.
#
# Va en /home/sutwercom/backup.sh (FUERA de public_html: nadie lo puede
# abrir desde el navegador) y lo llama un solo cron de cPanel, una vez por
# día. Él decide qué hacer:
#   - todos los días: dump de la base, comprimido, 14 días de retención;
#   - los domingos: además, tar de fotos y comprobantes, 60 días.
#
# La contraseña de MySQL NO está acá: la lee mysqldump de
# /home/sutwercom/.my.cnf (permisos 600). Ver BACKUP.md.
#
# Todo lo que pasa queda en /home/sutwercom/backups/backup.log, con fecha.
# =====================================================================

HOME_DIR=/home/sutwercom
APP=$HOME_DIR/public_html/fusion4x4offroad
DEST=$HOME_DIR/backups
CNF=$HOME_DIR/.my.cnf
DB=sutwercom_app_mayorista
HOY=$(date +%F)
LOG=$DEST/backup.log

mkdir -p "$DEST"
chmod 700 "$DEST"

log() { echo "$(date '+%Y-%m-%d %H:%M:%S')  $*" >> "$LOG"; }

# ---------- 1) Base de datos, todos los días ----------
if [ ! -f "$CNF" ]; then
    log "ERROR: falta $CNF con usuario y contraseña de MySQL. No se hizo el dump."
    exit 1
fi

TMP=$DEST/db_$HOY.sql.gz.parcial
if mysqldump --defaults-file="$CNF" --single-transaction --routines --quick "$DB" | gzip > "$TMP"; then
    mv "$TMP" "$DEST/db_$HOY.sql.gz"
    log "base OK  db_$HOY.sql.gz  $(du -h "$DEST/db_$HOY.sql.gz" | cut -f1)"
else
    rm -f "$TMP"
    log "ERROR: mysqldump falló. Revisar usuario/contraseña en $CNF."
    exit 1
fi
# Borrar dumps de más de 14 días.
find "$DEST" -name 'db_*.sql.gz' -mtime +14 -delete

# ---------- 2) Archivos, los domingos ----------
if [ "$(date +%u)" = "7" ]; then
    cd "$APP" || { log "ERROR: no existe $APP"; exit 1; }
    # Solo las carpetas que existan: si falta alguna, no frena el resto.
    QUE=""
    for c in fotos comprobantes docs devoluciones_docs recibos_docs config.php; do
        [ -e "$c" ] && QUE="$QUE $c"
    done
    # Las miniaturas se regeneran solas: no se guardan.
    if tar czf "$DEST/files_$HOY.tgz" --exclude='fotos/thumbs' $QUE 2>>"$LOG"; then
        log "archivos OK  files_$HOY.tgz  $(du -h "$DEST/files_$HOY.tgz" | cut -f1)  ($QUE )"
    else
        log "ERROR: tar de archivos falló."
    fi
    find "$DEST" -name 'files_*.tgz' -mtime +60 -delete
fi

# Nunca guardar más de 6 meses de log.
[ "$(wc -l < "$LOG")" -gt 400 ] && tail -n 200 "$LOG" > "$LOG.tmp" && mv "$LOG.tmp" "$LOG"
exit 0
