#! /bin/zsh

TMP=${TMP:-/tmp}

verbose=""

showHelp=""
showVersion=""

admode="fm"
toolchain=""
outputmode="xml"

ADR_SERVER_DEF="https://r-adr.de/"
ADR_SERVER="${ADR_SERVER:-${ADR_SERVER_DEF}}adr/"

server="$OPX_SERVER"

typeset -A transformFlags

optstring=":DhVFfrH:s:S:m:o:x:-:"
option=""

output="-"

result=0

opxopts=()

while getopts "$optstring" option; do
    case $option in
        (\?)
        echo "opx-client: error: illegal option -$OPTARG specified" >&2
        exit 1
        ;;
        (\:)
        echo "opx-client: error: argument expected after -$OPTARG option" >&2
        exit 1
        ;;
        ("-")
        case $OPTARG in
            (help)
            showHelp="yes"
            ;;
            (version)
            showVersion="yes"
            ;;
            (tmp-dir)
            userTmpDir=$argv[OPTIND]
            let OPTIND=OPTIND+1
            ;;
            (server)
            server=$argv[OPTIND]
            let OPTIND=OPTIND+1
            ;;
        esac
        ;;
        (D)
        set -x
        debug=1
        ;;
        (V)
        verbose=$OPTARG
        ;;
        (h)
        showHelp="yes"
        ;;
        (o)
        output="$OPTARG"
        ;;
        (F)
        admode="fm"
        ;;
        (f)
        admode="fm"
        ;;
        (r)
        admode="rm"
        ;;
        (H)
        opxopts=($opxopts '-H' "$OPTARG")
        ;;
        (m)
        toolchain="$OPTARG"
        ;;
        (x)
        outputmode="$OPTARG"
        ;;
        (s)
        arg=$OPTARG
        pname="${arg/%\=*/}"
        pvalue="${arg/$pname=/}"
#        echo "transform param: '$pname'='$pvalue'"
        if [[ -z "$pvalue" ]]; then
            transformFlags[$pname]=1
        else
            transformFlags[$pname]=$pvalue
        fi
        ;;
        (S)
        server=$OPTARG
        ;;
    esac
done
        
infile="$argv[$OPTIND]"

if [[ -n "$showVersion" ]]; then
    rev='$Revision$'
    echo "opx-client $rev[12,-3]"
    exit
fi

if [[ -n "$showHelp" ]]; then
    echo ""
    echo "    .*.*.   adr-client: Differentiation of R   .*.*."
    echo "    .*.*.       via the R/ADR server           .*.*."
    echo ""
    echo " R/ADR server name  ($server)"
    echo ""
    echo " usage: adr-client [options] file.R"
    echo " usage: adr-client [options] < file.R"
    echo ""

    echo " Options:"
    echo " -h     | --help            - show help and exit"
    echo "        | --version         - show help and exit"
    echo " -D                         - debug this script"
    echo " -f                         - forward mode"
    echo " -r                         - reverse mode"
    echo " -m name                    - set transformation mode"
    echo " -x mode                    - output mode: xml or soap"
    echo " -s name=value              - set parameter"
    echo " -S URL                     - server URL (default: \$ADR_SERVER)"
    echo " -p file                    - options file"
    echo " -o file                    - output file name"
    exit
fi

if [[ -z "$toolchain" ]]; then
    toolchain="r-ad-$admode"
fi

opx-client $opxopts -S $ADR_SERVER -m $toolchain ${argv[@]}
