#!/bin/sh
set -eu

ends_with_bak() {
    case "${1}" in
        *.bak) return 0 ;;
        *)     return 1 ;;
    esac
}

_bak() {
    filename="${1}"
    mv "${filename}" "${filename}.bak"
}

_unbak() {
    filename="${1}"
    new_filename="$(echo "${filename}" | sed 's/\.bak$//')"

    if [ -e "${new_filename}" ]; then
        echo "Filename '${new_filename}' already exists" >&2
        return 1
    fi

    mv "${filename}" "${new_filename}"
}

for filename in "${@}"; do
    if ends_with_bak "${filename}"; then
        _unbak "${filename}"
    else
        _bak "${filename}"
    fi
done
