#!/bin/bash

cp ~/.ssh/config ~/docs/backups/ssh_config
cp ~/.config/rclone/rclone.conf ~/docs/backups/rclone.conf
cp -r ~/.config/blender ~/docs/backups/config/blender
cp -r ~/.config/bacon ~/docs/backups/config/bacon
rsync -ravu --delete ~/.config/agenda/ ~/docs/backups/config/agenda/
rsync -ravu --delete ~/.config/blender/ ~/docs/backups/config/blender/

echo "build/
.git/lfs/
node_modules/
target/
dist/
torrents/" > /tmp/bkup.exclude

echo "build/**
.book/**
.git/lfs/**
node_modules/**
target/**
dist/**
env/**
etc/vids/**
torrents/**
unity/Assets/**
unity/Library/**
unity/Builds/**
blender/addons/**
blender/assets/**" > /tmp/cloud.bkup.exclude

OTHER=(~/archives)
REPOS=(~/projects ~/docs ~/notes ~/photos ~/work ~/musics)
CLOUD_REPOS=(~/projects ~/docs ~/notes ~/photos ~/work)

function localSync() {
    dest=$1
    echo $dest
    for d in ${REPOS[@]}; do
        rsync -azvu --progress "$d" "$dest/repos" --delete --delete-excluded --exclude-from=/tmp/bkup.exclude
    done
    for d in ${OTHER[@]}; do
        # NOTE can't use `--delete-excluded` because it also implies `--delete`
        rsync -azvu --progress "$d" "$dest" --exclude-from=/tmp/bkup.exclude
    done
    rsync -azvu --progress ~/downloads "$dest/repos" --delete --delete-excluded --progress --exclude-from=/tmp/bkup.exclude
    date > /tmp/last_updated
    scp /tmp/last_updated $dest/last_updated
}

if [[ $1 == 'home' ]]; then
    for dest in \
        francis@cache.local:/mnt/media \
        francis@cache.local:/mnt/backup; do
        localSync $dest
    done

# Backblaze B2
elif [[ $1 == 'cloud' ]]; then
    for d in ${CLOUD_REPOS[@]}; do
        echo -e "\n\e[0;33m$d\e[0m"
        rclone sync --delete-excluded --refresh-times --quiet --progress $d backup-crypt:repos/$(basename $d) --exclude-from /tmp/cloud.bkup.exclude
    done
    date > /tmp/last_updated
    rclone copy -q /tmp/last_updated backup-crypt:repos/last_updated

elif [[ $1 == 'usb' ]]; then
    dest=/mnt/usb/backup
    localSync $dest
fi
