#! /bin/bash

PROJECT_NAME=
PROJECT_NAME_SHORT=p
PROJECT_NAME_LONG=project-name
API_URL=http://buildapi.open-xchange.com
API_URL_SHORT=A
API_URL_LONG=bsapi-url
MAINTAINER_NAME=oxbuilduser
MAINTAINER_NAME_SHORT=m
MAINTAINER_NAME_LONG=maintainer-name
MAINTAINER_PASSWD=
MAINTAINER_PASSWD_SHORT=P
MAINTAINER_PASSWD_LONG=maintainer-password
PACKAGE_NAME=
PACKAGE_NAME_SHORT=n
PACKAGE_NAME_LONG=package-name
BUILD_UI=
BUILD_UI_SHORT=u
BUILD_UI_LONG=build-ui

MUSTOPTS="PROJECT_NAME API_URL MAINTAINER_NAME MAINTAINER_PASSWD PACKAGE_NAME"
LONGOPTS='$PROJECT_NAME_LONG:,$API_URL_LONG:,$MAINTAINER_NAME_LONG:,$MAINTAINER_PASSWD_LONG:,$PACKAGE_NAME_LONG:$BUILD_UI_LONG'
SHORTOPTS='$PROJECT_NAME_SHORT:$API_URL_SHORT:$MAINTAINER_NAME_SHORT:$MAINTAINER_PASSWD_SHORT:$PACKAGE_NAME_SHORT:$BUILD_UI_SHORT'

# some functions

die() {
    local ln=${BASH_LINENO[0]}
    test -n "$1" && echo 1>&2 "$1 in line $ln" || \
        echo 1>&2 "ERROR in line $ln"
    exit 1
}


usage() {
    echo
    echo "$0 currently knows the following parameters:"
    echo
    local lopts=$(echo $LONGOPTS | sed -e 's/[:,]/ /g')
    printf '%-30s | %-10s | %s\n' "Parameter" "Short Opt" "Default/current value"
    echo "--------------------------------------------------------------------"
    for opt in $lopts; do
        local rvar=${opt%_LONG}
        local svar=$(eval echo "${opt%_LONG}_SHORT")
        if [ -n "$svar" ]; then
            svar="-$svar"
        fi
        local default=$(eval echo $rvar | sed -e 's/ /,/g')
        local lopt=$(eval echo $opt)
        #echo $opt $rvar $default $lopt
        printf '%-30s | %-10s | %s\n' "--$lopt" "$svar" $default
    done
    echo
    echo
    echo
cat<<EOF

EOF
}
# some checks, are we able to build at all?
#if [ -f /etc/SuSE-release ]; then
#    DISTRI=SUSE
#    RPMSOURCEDIR=/usr/src/packages
#elif [ -f /etc/debian_version ]; then
#    # assuming debian
#    DISTRI=DEBIAN
#else
#    die "
#unsupported system for $0.
#A supported system must provide the basic debian packaging tools like dpkg-source.
#
#Currently unsupported systems:
#
#Fedora, RHEL
#"
#fi

export LC_ALL=C

# option handling

TEMP=$(POSIXLY_CORRECT=true \
    getopt -o Dh$(eval echo $SHORTOPTS) --long "help,$(eval echo $LONGOPTS)" -- "$@") || die "exiting"
eval set -- "$TEMP"

while true; do
    case "$1" in
        -$PROJECT_NAME_SHORT|--$PROJECT_NAME_LONG)
            PROJECT_NAME=$2
            shift 2
            ;;
        -$API_URL_SHORT|--$API_URL_LONG)
            API_URL=$2
            shift 2
            ;;
        -$MAINTAINER_NAME_SHORT|--$MAINTAINER_NAME_LONG)
            MAINTAINER_NAME=$2
            shift 2
            ;;
        -$MAINTAINER_PASSWD_SHORT|--$MAINTAINER_PASSWD_LONG)
            MAINTAINER_PASSWD=$2
            shift 2
            ;;
        -$PACKAGE_NAME_SHORT|--$PACKAGE_NAME_LONG)
            PACKAGE_NAME=$2
            shift 2
            ;;
        -$BUILD_UI_SHORT|--$BUILD_UI_LONG)
            BUILD_UI=true
            shift
            ;;
        -h|--help)
            usage
            exit
            shift
            ;;
        -D)
            set -x
            shift
            ;;
        --)
            shift
            break
            ;;
        *)
            die "Internal error!"
            exit 1
            ;;
    esac
done

# generic parameter checking
for opt in $MUSTOPTS; do
    opt_var=$(eval echo \$$opt)
    opt_var_long=$(eval echo \$${opt}_LONG)
    opt_var_values=$(eval echo \$${opt}_VALUES)
    if [ -z "$opt_var" ]; then
        die "missing required option --$opt_var_long"
    fi
    if [ -n "$opt_var_values" ]; then
        found=
        for val in $opt_var_values; do
            if [ "$val" == "$opt_var" ]; then
                found=$val
            fi
        done
        if [ -z "$found" ]; then
            die "\"$opt_var\" is not a valid option to --$opt_var_long"
        fi
    fi
done

# ------------------------------ MAIN -----------------------------

if [ ! -e build.xml ]; then
    die "no build.xml found, be sure to cd into the build directory"
fi

if [ -z "$BUILD_UI" ]; then
   ANT_PARMS="clean debianSource upload"
else
   pushd ../ui
   UIBRANCH=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
   ./build.sh destDir=../build/tmp dist --trace
   popd
   ANT_PARMS="-DsourceName=ui -DshortProductName=frontend -DfullProductName=frontend -DdisabledRepositories= -Dbranch=$UIBRANCH determineProject projects2Project upload"
fi

ANT_OPTS=-Xmx512m ant -lib lib -f build.xml \
    -DmainDir="$(pwd)/../" \
    -Dproject=$PROJECT_NAME \
    -DpackageName=$PACKAGE_NAME \
    -Durl=$API_URL \
    -Dlogin=$MAINTAINER_NAME \
    -Dpassword=$MAINTAINER_PASSWD \
    $ANT_PARMS
