#!/bin/bash

set -eu
set -o pipefail

save_directory=""
saveset_pattern='.'
starting_directory="/"
nonrecursive=""
backup_id_paragraph=False

usage()
{
    retval="$1"
    (
        echo 'Find (complete) backups containing /start/dir'
        echo
        echo "Usage: $0 --save-directory /save/dir --saveset-pattern '^.*_movie_.*$' --starting-directory /start/dir --nonrecursive --backup-id-same-line"
        echo "   --save-directory is required"
        echo '   --saveset-pattern defaults to '"$saveset_pattern"
        echo "   --starting-directory defaults to $starting_directory"
        echo "   --nonrecursive"
        echo '   --backup-id-paragraph'
        echo
        echo "Example uses:"
        echo "   1) find-backup --save-directory /backshift-production/save-directory --saveset-pattern '_just-movie_' --starting-directory '/movie/Ninjago/Season 2/Disc 1'"
        echo "   2) find-backup --save-directory /backshift-production/save-directory --saveset-pattern 'server.*_just-home' --starting-directory '/home/dstromberg/public_html/primes'"

    ) 1>&2
    exit "$retval"
}

while [ "$#" -ge 1 ]
do
    case "$1" in
        --save-directory)
            save_directory="$2"
            shift
            ;;
        --saveset-pattern)
            saveset_pattern="$2"
            shift
            ;;
        --starting-directory)
            starting_directory="$2"
            shift
            ;;
        --nonrecursive)
            nonrecursive=--nonrecursive
            ;;
        --backup-id-paragraph)
            backup_id_paragraph=True
            ;;
        --help)
            usage 0
            ;;
        *)
            echo "$0: Unrecognized option: $1" 1>&2
            usage 1
            ;;
    esac
    shift
done

if [ "$save_directory" = "" ]
then
    echo "$0: --save-directory is a required option" 1>&2
    usage 1
fi

case "$starting_directory" in
    /*)
        ;;
    *)
        echo "$0: --starting-directory must begin with a /" 1>&2
        usage 1
        ;;
esac

function gen_backup_filenames
{
    backshift \
        --save-directory "$save_directory" \
        $nonrecursive \
        --list-backup \
        --backup-id "$backup_id" \
        --starting-directory "$starting_directory" 2>&1 || true
}

# Only report on -completed- backups
for backup_id in $(backshift --save-directory "$save_directory" --list-backups | awk '$4 !~ /None/ { print $1 }' | egrep "$saveset_pattern")
do
    case "$backup_id_paragraph" in
        True)
            echo "$backup_id"
            gen_backup_filenames "$backup_id" | sed "s#^#    #"
            echo
            ;;
        False)
            gen_backup_filenames "$backup_id" | sed "s/^/$backup_id /"
            ;;
        *)
            echo "$0: Internal error: \$backup_id_same_line has an unrecognized value" 1>&2
            exit 1
            ;;
    esac
done