#!/bin/bash
# OneDrive -> /mnt/backup. Ничего не удаляется навсегда:
#   current/          — точное зеркало OneDrive
#   archive/<время>/  — всё, что в OneDrive удалили или перезаписали (хранится вечно)
#   manifests/        — quickxor-хэши архивных файлов (для onedrive-verify)
#   logs/             — журнал каждого прогона: какие файлы скачаны/изменены/убраны в архив
set -euo pipefail
ROOT=/mnt/backup/onedrive
TS=$(date +%F_%H%M)

mountpoint -q /mnt/backup || { echo "/mnt/backup не смонтирован — пропуск"; exit 1; }
mkdir -p "$ROOT"/{current,archive,manifests,logs}
LOG="$ROOT/logs/sync-$TS.log"

# rclone сам сверяет хэш каждого скачанного файла с хэшем OneDrive
rclone sync onedrive: "$ROOT/current" \
  --backup-dir "$ROOT/archive/$TS" \
  --exclude "/Personal Vault/**" \
  --transfers 4 --checkers 8 \
  --retries 5 --low-level-retries 20 \
  --log-file "$LOG" --log-level INFO \
  --stats 10m --stats-one-line

if [ -d "$ROOT/archive/$TS" ]; then
  rclone hashsum quickxor "$ROOT/archive/$TS" > "$ROOT/manifests/archive-$TS.qxh"
  echo "в архив ушло: $(wc -l < "$ROOT/manifests/archive-$TS.qxh") файлов"
fi

echo "OK: current=$(du -sh "$ROOT/current" | cut -f1), диск занят на $(df --output=pcent /mnt/backup | tail -1 | tr -d " ")"
[ "$(df --output=pcent /mnt/backup | tail -1 | tr -dc 0-9)" -lt 90 ] || { echo "ВНИМАНИЕ: диск заполнен >90%"; exit 2; }
