#!/usr/bin/env sh

. /usr/local/share/vulture/helpers.sh

#############
# variables #
#############
backup_name=""
create_backup=0
list_backups=1
delete_backup=0

#############
# functions #
#############
usage() {
    /bin/echo "USAGE backup OPTIONS"
    /bin/echo "This command handles mongodb backups/dumps"
    /bin/echo "the default action is to list existing backups"
    /bin/echo ""
    /bin/echo "OPTIONS:"
    /bin/echo "	-c	create a new backup"
    /bin/echo "	-l	list existing backups"
    /bin/echo "	-d	delete specified backup"
    /bin/echo "	-n <backup name>	specify the new backup name"
    exit 1
}

finalize_early() {
    # shellcheck disable=SC2317
    finalize 1 "Stopped"
}

finalize() {
    err_code=$1
    err_message=$2

    if [ "${err_code}" -ne 0 ]; then
        [ -d "${BACKUP_PATH:?}/${backup_name}/" ] && rm -r "${BACKUP_PATH:?}/${backup_name}/"
    fi

    error_and_exit "${err_code}" "$err_message"
}

########
# MAIN #
########
trap finalize_early INT
/bin/mkdir -p "$BACKUP_PATH"

while getopts 'clhn:d' opt; do
    case "${opt}" in
        c)  create_backup=1;
            list_backups=0;
            delete_backup=0;
            ;;
        l)  create_backup=0;
            list_backups=1;
            delete_backup=0;
            ;;
        d)  create_backup=0;
            list_backups=0;
            delete_backup=1;
            ;;
        n)  backup_name="$(/usr/bin/basename "${OPTARG}")";
            ;;
        h|*)  usage;
            ;;
    esac
done
shift $((OPTIND-1))

COMMAND="$(/usr/bin/command -v mongodump)"
TLS_PARAMS="$(get_tls_params "${COMMAND}")"
URI="$(get_uri)"

if [ -z "${COMMAND}" ]; then
    finalize 1 "mongodb-tools not installed in jail!"
fi

if [ $delete_backup -eq 1 ]; then
    if [ -z "${backup_name}" ]; then
        finalize 1 "Missing backup name"
    elif [ -d "${BACKUP_PATH:?}/${backup_name}" ]; then
        /bin/echo "deleting backup ${backup_name}..."
        /bin/rm -r "${BACKUP_PATH:?}/${backup_name}"
    fi
elif [ $create_backup -eq 1 ]; then
    [ -n "${backup_name}" ] || backup_name="$(date -u +%Y%m%d_%H%M%S)";
    /bin/mkdir -p "${BACKUP_PATH:?}/${backup_name}" || finalize 1 "Could not create new backup folder"
    $COMMAND $TLS_PARAMS --oplog --quiet --out "${BACKUP_PATH:?}/${backup_name}/" "$URI" || finalize 1 "Error(s) while creating new backup"
    /bin/echo "New backup ${backup_name} created"
elif [ $list_backups -eq 1 ]; then
    # shellcheck disable=SC2045
    for backup in $(ls -rt1 "${BACKUP_PATH:?}"); do
        /usr/bin/printf "%s\t%s\n" "$(du -hs "${BACKUP_PATH:?}/${backup}" | cut -f1)" "${backup}"
    done
fi

finalize 0
