#!/bin/bash
# rotate_logs.sh - Rotación automática de logs del sistema chatWA
# 
# Uso: Agregar a crontab con:
#   0 3 * * * /home/www/chatWA/scripts/rotate_logs.sh >> /var/log/chatwa_rotate.log 2>&1
#
# Política:
#   - Mantiene logs de los últimos 7 días
#   - Comprime logs antiguos con gzip
#   - Limita tamaño máximo de log activo a 10MB

LOG_DIR="/home/www/chatWA"
ARCHIVE_DIR="/home/www/chatWA/logs_archive"
MAX_SIZE_MB=10
KEEP_DAYS=7

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Iniciando rotación de logs..."

# Crear directorio de archivo si no existe
mkdir -p "$ARCHIVE_DIR"

# Lista de logs a rotar
LOGS=(
    "errores.txt"
    "debug.log"
    "debug_gastos.log"
    "error.log"
)

for LOG_FILE in "${LOGS[@]}"; do
    FULL_PATH="$LOG_DIR/$LOG_FILE"
    
    if [ ! -f "$FULL_PATH" ]; then
        continue
    fi
    
    # Obtener tamaño en MB
    SIZE_MB=$(du -m "$FULL_PATH" 2>/dev/null | cut -f1)
    
    if [ "$SIZE_MB" -ge "$MAX_SIZE_MB" ]; then
        echo "  Rotando $LOG_FILE (${SIZE_MB}MB >= ${MAX_SIZE_MB}MB)"
        
        # Nombre del archivo rotado con fecha
        DATE_SUFFIX=$(date '+%Y%m%d_%H%M%S')
        ROTATED_NAME="${LOG_FILE%.txt}_${DATE_SUFFIX}.txt"
        ROTATED_NAME="${ROTATED_NAME%.log}_${DATE_SUFFIX}.log"
        
        # Mover a archivo
        mv "$FULL_PATH" "$ARCHIVE_DIR/$ROTATED_NAME"
        
        # Comprimir
        gzip "$ARCHIVE_DIR/$ROTATED_NAME" 2>/dev/null
        
        # Crear nuevo archivo vacío con permisos correctos
        touch "$FULL_PATH"
        chown apache:apache "$FULL_PATH" 2>/dev/null
        chmod 664 "$FULL_PATH"
        
        echo "  ✓ Rotado y comprimido a $ARCHIVE_DIR/$ROTATED_NAME.gz"
    fi
done

# Limpiar logs antiguos (más de KEEP_DAYS días)
echo "  Limpiando logs más antiguos de $KEEP_DAYS días..."
find "$ARCHIVE_DIR" -name "*.gz" -mtime +$KEEP_DAYS -delete 2>/dev/null
DELETED=$?
if [ $DELETED -eq 0 ]; then
    echo "  ✓ Limpieza de archivos antiguos completada"
fi

# Mostrar espacio usado
TOTAL_SIZE=$(du -sh "$ARCHIVE_DIR" 2>/dev/null | cut -f1)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Rotación completada. Archivo total: $TOTAL_SIZE"
