#!/bin/bash

if [[ -z $MISTAKE_PROOF_CONF ]]; then
    cmdConf=/etc/mistake-proof.d/mistake_proof_options
else
    cmdConf=$MISTAKE_PROOF_CONF/mistake_proof_options
fi

if [ $# -lt 1 ]; then
    echo "Usage:"
    echo "  mistake_proof command [option] [args]"
    exit 1
fi

source $cmdConf

cmd=$1
shift

cmdOp=$(echo $cmd | sed 's/-/_/g')
cmdOp=__mistakeProof_${cmdOp}
needMistakeProof=0
for options in `eval echo '${'"$cmdOp"'[@]}'`
do
    if [ x"$options" == x"$cmd" ]; then
        needMistakeProof=1
        break
    fi

    options=$(echo $options | sed 's/#/ /g' | sed 's/ [ ]*/ /g')
    current=$(echo "$@" | sed 's/ [ ]*/ /g')
    if [[ x"`eval echo $options`" == x"$current" ]]; then
        needMistakeProof=1
        break
    fi
done

if [ $needMistakeProof -eq 0 ]; then
    eval $cmd "$@"
    exit $?
fi

echo "This operation may be unsafe, are you sure you want to do this? please check(y or n):"
read choice
while true
do
    if [ x"${choice^^}" == x"Y" ]; then
        eval $cmd "$@"
        ret=$?
        break
    elif [ x"${choice^^}" == x"N" ]; then
        echo "The operation is aborted."
        ret=0
        break
    else
        echo "Please input y or n:"
        read choice
    fi
done

exit $ret
