#!/usr/bin/env bash

fail() {
    printf "$1" >&2
    exit $2
}

if [[ -n "${ALMOXARIFE_TEST_FAIL}" ]]; then
    fail "${ALMOXARIFE_TEST_FAIL}" 1
fi

if [[ -n "${ALMOXARIFE_TEST_CWD}" && "$(pwd)" != "${ALMOXARIFE_TEST_CWD}" ]]; then
    fail "wrong CWD: $(pwd); expecting ${ALMOXARIFE_TEST_CWD}" 2
fi

cmd="${1}"
shift

case "${cmd}" in
    clone)
        repo_url="${1}"
        repo_path="${2}"

        if [[ -n "${ALMOXARIFE_TEST_LOCATION}" && "${repo_url}" != "${ALMOXARIFE_TEST_LOCATION}" ]]; then
            fail "wrong git URL: ${repo_url}; expecting ${ALMOXARIFE_TEST_LOCATION}" 3
        fi

        if [[ -n "${ALMOXARIFE_TEST_REPO_PATH}" && "${repo_path}" != "${ALMOXARIFE_TEST_REPO_PATH}" ]]; then
            fail "wrong repo path: ${repo_path}; expecting ${ALMOXARIFE_TEST_REPO_PATH}" 4
        fi

        mkdir -p "${repo_path}"
        ;;

    pull)
        if [[ -n "${ALMOXARIFE_TEST_PULL_FAIL}" ]]; then
            fail "can't pull changes" 5
        fi

        if (( $# > 1 )); then
            fail "unexpected argument ${2}" 6
        fi
        ;;

    rev-parse)
        if [[ -n "${ALMOXARIFE_TEST_REV_PARSE_FAIL}" ]]; then
            fail "can't retrieve commit SHA" 7
        elif [[ "${ALMOXARIFE_TEST_PLUGIN_UPDATE}" -eq 1 && -e rev-parse.txt ]]; then
            echo "ghijkl"
        else
            echo "abcdef"
            # We need to know if this is the first or the second call to rev-parse.
            # To do so, we create a dummy file in the first run. Hacky, but works.
            touch rev-parse.txt
        fi
        ;;

    log)
        if [[ -n "${ALMOXARIFE_TEST_LOG_FAIL}" ]]; then
            fail "can't get log of changes" 8
        else
            cat <<'EOF'
abcdef Some change
ghijk Other change
EOF
        fi
        ;;

    *)
        fail "unexpected subcommand: ${cmd}" 9
        ;;
esac
