#!/bin/sh
# backup_db.sh — MariaDB dump จาก container → host backup dir
# ใช้ร่วมกับ dms_mariadb (ชื่อ container), และ mount /backup ไว้แล้ว

set -eu

# ---- ปรับค่าตามจริง ----
CONTAINER_NAME="dms_mariadb"
DB_NAME="dms"
DB_USER="center"
DB_PASS="Center#2025"       # แนะนำเปลี่ยนไปใช้ ENV/ไฟล์ .env แล้ว source แทนการฝังรหัสผ่าน
RETENTION_DAYS="${RETENTION_DAYS:-14}"
# ------------------------

STAMP="$(date +'%Y%m%d_%H%M%S')"
OUTFILE="/backup/${DB_NAME}_backup_${STAMP}.sql.gz"

echo "[INFO] Starting dump: $OUTFILE"

# ตรวจว่า container รันอยู่?
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
  echo "[ERROR] Container ${CONTAINER_NAME} not running."
  exit 1
fi

# ตรวจว่ามี /backup ใน container (map มาจาก /share/dms-data/mariadb/backup)
if ! docker exec "${CONTAINER_NAME}" sh -lc 'test -d /backup'; then
  echo "[ERROR] /backup is not mounted inside container."
  exit 1
fi

# ทำ dump แล้วบีบอัดภายในคอนเทนเนอร์ (ประหยัด IO/permission ง่ายสุด)
docker exec "${CONTAINER_NAME}" sh -lc   "mysqldump -u\"${DB_USER}\" -p\"${DB_PASS}\" --single-transaction --routines --triggers --events \"${DB_NAME}\" | gzip > \"${OUTFILE}\""

if [ $? -eq 0 ]; then
  echo "[OK] Backup complete: ${OUTFILE}"
else
  echo "[ERROR] Backup failed."
  exit 1
fi

# ลบไฟล์เก่าตามนโยบายเก็บรักษา (ทำจาก host ผ่าน bind mount)
HOST_BACKUP_DIR="${HOST_BACKUP_DIR:-/share/dms-data/mariadb/backup}"
find "${HOST_BACKUP_DIR}" -type f -name "${DB_NAME}_backup_*.sql.gz" -mtime +${RETENTION_DAYS} -print -delete

echo "[DONE] Cleanup older than ${RETENTION_DAYS} days finished."
