#!/bin/bash

usage() {
    cat <<EOF
  query_suite run -h <host> -i <suite_dir> -o <output_dir> [-s <suite>]

  Run query test suites

  A query test suite must be a subdirectory of suite_dir and contain
  either files with queries in them, or if the suite name looks like
  "values_operator", the files must contain values for the operator
  instead of full queries.

  The query outputs for each suite will be stored in files named
  after their suites and input file names under the output_dir.

EOF
    exit
}

e() { [ -n "$VERBOSE" ] && echo "$@" >&2 ; "$@" ; }

query()  { # host query
    local host=$1 query="$2"
    e ssh -p 29418 "$host" gerrit query --format json "$query"
}

run_suite() { # host idir odir suite operator
    local host=$1 idir=$2 odir=$3 suite=$4 operator=$5 qfile files

    mkdir -p "$odir/$suite"

    echo "$suite" | grep -q "^values_" && operator=$(echo "$suite" | sed '-es/^values_//')

    if [ -z "$suite" ] ; then
        files=($(cd "$idir" ; echo *))
    else
        files=($(cd "$idir" ; echo $suite/*))
    fi

    for qfile in "${files[@]}" ; do
        if [ -d "$idir/$qfile" ] ; then
            run_suite "$host" "$idir" "$odir" "$qfile" "$operator"
        else
            if [ -n "$operator" ] ; then
                query "$host" "$operator:{$(< "$idir/$qfile")}" > "$odir/$qfile"
            else
                query "$host" "$(< "$idir/$qfile")" > "$odir/$qfile"
            fi
        fi
    done
}

cmd=''
while [ $# -gt 0 ] ; do
    case "$1" in
        -v) VERBOSE=$1 ;;

        -h) shift ; HOST=$1 ;;
        -s) shift ; SUITE=$1 ;;
        -i) shift ; IDIR=$1 ;;
        -o) shift ; ODIR=$1 ;;

        run) cmd=$1 ;;

        --exec) shift ; "$@" ; exit ;;

        *) usage ;;
    esac
    shift
done

case "$cmd" in
    run)
        [ -z "$HOST" ] && usage
        [ -z "$IDIR" ] && usage
        [ -z "$ODIR" ] && usage
        [ -z "$SUITE" ] && SUITE=""
        run_suite "$HOST" "$IDIR" "$ODIR" "$SUITE" ; exit
    ;;
esac
