﻿#!/bin/bash

# --- 1. CONFIGURACIÓN ---
SFTP_SERVER="10.118.32.52"
SFTP_USER="desarrollorepo"
SFTP_PASSWORD="2025.Desarrollo"
# ¡OJO! Te recomiendo usar una carpeta distinta para no mezclar código con bases de datos
SFTP_DIRECTORY="/Administrador/Proyectos" 
DIAS_RETENCION=15

export SSHPASS=$SFTP_PASSWORD
DATE=$(date +%Y%m%d%H%M%S)

# Ruta base donde están tus sitios
BASE_DIR="/var/www"

# --- 2. FUNCIÓN DE COMPRESIÓN Y SUBIDA ---
backup_www_and_upload() {
    local DIR_FULL_PATH="$1"
    # Extraemos solo el nombre de la carpeta (ej. "html" de "/var/www/html")
    local DIR_NAME=$(basename "$DIR_FULL_PATH")
    
    # Nombre del archivo: sitio_html_20251224.tar.gz
    local BACKUP_FILE="sitio_${DIR_NAME}_${DATE}.tar.gz"

    echo "[INFO] Comprimiendo carpeta: $DIR_NAME"
    
    # TAR + GZIP
    # -c: Crear, -z: Gzip, -f: Archivo
    # Entramos al directorio base (-C) para que el zip no incluya toda la ruta /var/www/...
    tar -czf "$BACKUP_FILE" -C "$BASE_DIR" "$DIR_NAME"

    # Batch para subir
    echo "cd $SFTP_DIRECTORY" > batch_upload_www.txt
    echo "put $BACKUP_FILE" >> batch_upload_www.txt
    echo "bye" >> batch_upload_www.txt

    # Subir usando el puerto 22 (sin flag -P)
    sshpass -e sftp -P 22 -oBatchMode=no -b batch_upload_www.txt $SFTP_USER@$SFTP_SERVER
    
    # Limpieza local
    rm -f "$BACKUP_FILE" batch_upload_www.txt
}

# --- 3. FUNCIÓN DE LIMPIEZA REMOTA (La misma lógica inteligente) ---
clean_remote_files() {
    echo "[INFO] Buscando respaldos de código antiguos en NAS..."

    echo "cd $SFTP_DIRECTORY" > batch_ls_www.txt
    echo "ls -1" >> batch_ls_www.txt
    
    sshpass -e sftp -P 22 -oBatchMode=no -b batch_ls_www.txt $SFTP_USER@$SFTP_SERVER > lista_remota_www.txt 2>/dev/null

    echo "cd $SFTP_DIRECTORY" > batch_delete_www.txt
    ARCHIVOS_BORRADOS=0
    FECHA_CORTE=$(date -d "-$DIAS_RETENCION days" +%s)

    while read -r ARCHIVO; do
        # Buscamos la fecha en el nombre (YYYYMMDDHHMMSS)
        FECHA_STR=$(echo "$ARCHIVO" | grep -oE '[0-9]{14}')
        if [[ ! -z "$FECHA_STR" ]]; then
            FECHA_FMT="${FECHA_STR:0:4}-${FECHA_STR:4:2}-${FECHA_STR:6:2} ${FECHA_STR:8:2}:${FECHA_STR:10:2}:${FECHA_STR:12:2}"
            FECHA_ARCHIVO_SEC=$(date -d "$FECHA_FMT" +%s 2>/dev/null)

            if [[ $? -eq 0 && $FECHA_ARCHIVO_SEC -lt $FECHA_CORTE ]]; then
                echo "rm $ARCHIVO" >> batch_delete_www.txt
                ARCHIVOS_BORRADOS=$((ARCHIVOS_BORRADOS+1))
            fi
        fi
    done < lista_remota_www.txt

    if [[ $ARCHIVOS_BORRADOS -gt 0 ]]; then
        echo "bye" >> batch_delete_www.txt
        echo "[INFO] Borrando $ARCHIVOS_BORRADOS archivos antiguos..."
        sshpass -e sftp -P 22 -oBatchMode=no -b batch_delete_www.txt $SFTP_USER@$SFTP_SERVER
    else
        echo "[INFO] Nada que borrar hoy en carpeta de código."
    fi

    rm -f batch_ls_www.txt lista_remota_www.txt batch_delete_www.txt
}

# --- EJECUCIÓN PRINCIPAL ---

# Bucle: Busca cada directorio dentro de /var/www/
# El */ al final asegura que solo liste carpetas
for CARPETA in "$BASE_DIR"/*/; do
    # Validar si existe (por si el directorio está vacío)
    if [ -d "$CARPETA" ]; then
        # Quitamos la barra final para estética
        CARPETA=${CARPETA%/}
        backup_www_and_upload "$CARPETA"
    fi
done

clean_remote_files

echo "[FIN] Respaldo de WWW terminado."
