#!/usr/bin/env bash
set -e

# A POSIX variable
OPTIND=1         # Reset in case getopts has been used previously in the shell.

# Initialize variables
mode="format"
xml_dir="message_definitions"
keep_old=0

while getopts "h?cd:o" opt; do
    case "$opt" in
    h|\?)
        show_help
        exit 0
        ;;
    c)  mode="check"
        ;;
    d)  xml_dir=${OPTARG}
        ;;
    o)  keep_old=1
        ;;
    esac
done

shift $(($OPTIND - 1))

xml_file="$1"

if [ "$xml_file" == "" ]
then
    xml_files=$(find $xml_dir -name "*.xml")
else
    xml_files="$xml_dir/$xml_file"
fi
echo "processing file(s):"
echo "$xml_files"

ret=0
for f in $xml_files
do
    xmllint -format "${f}" > "${f}".new
    case "$mode" in
    format)
        if ! cmp "${f}" "${f}".new >/dev/null 2>&1
        then
            echo "formatting $f"
            if [ $keep_old -eq 1 ]
            then
                cp "${f}" "${f}".old
            fi
            cp "${f}".new "${f}"
        fi
        ;;
    check)
        if ! cmp "${f}" "${f}".new >/dev/null 2>&1
        then
            echo "file $f needs formatting - run ./scripts/format_xml.sh $f"
            ret=1
        fi
        ;;
    esac
    rm "${f}".new
done

exit $ret
