#!/usr/bin/env bash
# ==============================================================================
# Script de Respaldo Automatizado de PostgreSQL 13 para Loha Inventario (Debian)
# ==============================================================================

set -eo pipefail

# 1. Configuración de Entorno
PROJECT_DIR="/var/www/loha"
BACKUP_DIR="${PROJECT_DIR}/storage/app/backups"
LOG_FILE="${PROJECT_DIR}/storage/logs/postgres_backup.log"
DATE=$(date +"%Y-%m-%d_%H%M%S")
RETENTION_DAYS=30

# Crear directorios si no existen
mkdir -p "${BACKUP_DIR}"
mkdir -p "$(dirname "${LOG_FILE}")"

# Cargar variables de entorno del archivo .env si existe
if [ -f "${PROJECT_DIR}/.env" ]; then
    DB_NAME=$(grep -E '^DB_DATABASE=' "${PROJECT_DIR}/.env" | cut -d '=' -f2)
    DB_USER=$(grep -E '^DB_USERNAME=' "${PROJECT_DIR}/.env" | cut -d '=' -f2)
    DB_PASS=$(grep -E '^DB_PASSWORD=' "${PROJECT_DIR}/.env" | cut -d '=' -f2)
    DB_HOST=$(grep -E '^DB_HOST=' "${PROJECT_DIR}/.env" | cut -d '=' -f2)
    DB_PORT=$(grep -E '^DB_PORT=' "${PROJECT_DIR}/.env" | cut -d '=' -f2)
fi

DB_NAME="${DB_NAME:-db_brayham}"
DB_USER="${DB_USER:-backup_procur}"
DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="${DB_PORT:-5432}"

BACKUP_FILE="${BACKUP_DIR}/backup_loha_${DATE}.sql.gz"

echo "[$(date +"%Y-%m-%d %H:%M:%S")] Iniciando respaldo de '${DB_NAME}'..." >> "${LOG_FILE}"

# Ejecutar pg_dump con compresión gzip
export PGPASSWORD="${DB_PASS}"
if pg_dump -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" "${DB_NAME}" | gzip > "${BACKUP_FILE}"; then
    FILESIZE=$(ls -lh "${BACKUP_FILE}" | awk '{print $5}')
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] ✓ Respaldo exitoso: ${BACKUP_FILE} (${FILESIZE})" >> "${LOG_FILE}"
else
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] ✗ Error fatal al ejecutar pg_dump" >> "${LOG_FILE}"
    exit 1
fi
unset PGPASSWORD

# 2. Rotación de respaldos antiguos (más de 30 días)
echo "[$(date +"%Y-%m-%d %H:%M:%S")] Depurando respaldos con más de ${RETENTION_DAYS} días..." >> "${LOG_FILE}"
find "${BACKUP_DIR}" -name "backup_loha_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -exec rm -f {} \;
echo "[$(date +"%Y-%m-%d %H:%M:%S")] ✓ Limpieza finalizada." >> "${LOG_FILE}"
