#!/usr/bin/env bash

# Source modules.
for file in /root/.config/bash/module/*.sh; do
	source "${file}"
done

function report() {
	echo "${*}"
	notify "${*}"
}

# Define constants.
path_src="/storage/hot"
path_mount="/storage/cold_1"
path_backup="${path_mount}/backup"
path_docker="${path_backup}/home"
path_media="/storage/cold_1/media /storage/cold_2/media"

# Check if backup drive is mounted.
if [ ! -f "${path_mount}"/.mount ]; then
	report "Backup : ${path_mount} not mounted!"
	exit 1
fi

# Check if hot storage is mounted.
if [ ! -f "${path_src}"/.mount ]; then
	report "Backup : ${path_src} not mounted!"
	exit 1
fi

# Cd to src storage.
cd "${path_src}"

# Save media list.
find ${path_media} -type d > ${path_backup}/cold/ColdMedia.txt || report "Backup : Failed to save media list!"
cd ${path_backup}/cold/
archive_fast ColdMedia.txt && rm ColdMedia.txt || report "Backup : Failed to archive media list!"
cd -

# Backup docker.
docker=$(archive_fast docker/)
bupsize=$(/usr/bin/env du -h ${docker} | awk '{print $1}')
mv ${docker} ${path_docker}/ || report "Backup : Failed to save docker!"

# Backup some media.
cd ${path_src}/media/
paper=$(archive_fast paper/)
mv ${paper} ${path_backup}/paper/ || report "Backup : Failed to save paper!"
cd -

# Prune media copies.
cd ${path_backup}/paper/
archive_prune
cd -

cd ${path_backup}/cold/
archive_prune
cd -

# Prune old Docker copies.
cd ${path_docker}
archive_prune Docker 7
cd -

# Prune game saves.
cd "${path_backup}/save/"
archive_prune
cd -

# Sync writes.
sync

# Notify completion & size.
notify_silent "Backup : Complete ${bupsize}."
echo "Backup : Complete ${bupsize}."