#!/bin/bash

REQUIRED_FREE_GB=460
REQUIRED_FREE_BYTES=$((REQUIRED_FREE_GB * 1024 * 1024 * 1024))
BACKUP_LABELS=("MARTES-JUEVES" "Lun-Mier" "Viernes-1-3-5" "VIE-2-4")
MOUNT_BASE="/mnt/backup-auto"
LOG_FILE="/var/log/backup-disk-cleanup.log"
DEVICE="$1"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Verify the device is one of the backup disks
LABEL=$(blkid -s LABEL -o value "$DEVICE" 2>/dev/null)
IS_BACKUP=0
for L in "${BACKUP_LABELS[@]}"; do
    if [ "$LABEL" = "$L" ]; then
        IS_BACKUP=1
        break
    fi
done

if [ "$IS_BACKUP" -eq 0 ]; then
    exit 0
fi

log "=========================================="
log "Disco de backup detectado: $LABEL ($DEVICE)"

# Check if already mounted
MOUNT_POINT=$(lsblk -no MOUNTPOINT "$DEVICE" 2>/dev/null | tr -d ' ')
MOUNTED_HERE=0

if [ -z "$MOUNT_POINT" ]; then
    MOUNT_POINT="$MOUNT_BASE/$LABEL"
    mkdir -p "$MOUNT_POINT"
    if ! mount "$DEVICE" "$MOUNT_POINT"; then
        log "ERROR: No se pudo montar $DEVICE en $MOUNT_POINT"
        exit 1
    fi
    log "Montado en $MOUNT_POINT"
    MOUNTED_HERE=1
else
    log "Ya montado en $MOUNT_POINT"
fi

# Free space loop
while true; do
    FREE_BYTES=$(df --block-size=1 "$MOUNT_POINT" | awk 'NR==2 {print $4}')
    FREE_GB=$(echo "scale=1; $FREE_BYTES / 1024 / 1024 / 1024" | bc)

    log "Espacio libre: ${FREE_GB} GB"

    if [ "$FREE_BYTES" -ge "$REQUIRED_FREE_BYTES" ]; then
        log "Espacio suficiente (${FREE_GB}GB >= ${REQUIRED_FREE_GB}GB). Sin acción necesaria."
        break
    fi

    # Find oldest dated folder (format D_YYYY-MM-DD)
    OLDEST=$(ls -1 "$MOUNT_POINT" | grep -E '^D_[0-9]{4}-[0-9]{2}-[0-9]{2}$' | sort | head -1)

    if [ -z "$OLDEST" ]; then
        log "ERROR: Espacio insuficiente (${FREE_GB}GB) y no hay carpetas de fecha para eliminar."
        break
    fi

    log "Eliminando carpeta antigua: $OLDEST (espacio libre actual: ${FREE_GB}GB)"
    rm -rf "$MOUNT_POINT/$OLDEST"
    log "Carpeta $OLDEST eliminada."
done

if [ "$MOUNTED_HERE" -eq 1 ]; then
    umount "$MOUNT_POINT"
    log "Disco $LABEL desmontado."
fi

log "Proceso finalizado para $LABEL."
