#!/usr/bin/env bash
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

if [ "${TESTPATCHDEBUG}" == "true" ] ; then
  set -x
fi

#BASEDIR=$(pwd)
TASKNAME="DISTRO"
OP=""
TEMPDIR=""
REPORTDIR=""
SUMMARYFILE=""
STDOUT="/dev/null"
MVNPASSTHRU=""

###############################################################################
cleanupAndExit() {
  exit "$1"
}
###############################################################################
printUsage() {
  echo "Usage: $0 --taskname | (--op=pre|post|report --tempdir=<TEMP DIR> --reportdir=<REPORT DIR> --summaryfile=<SUMMARY FILE>) [--verbose] [-D<VALUE>...] [-P<VALUE>...]"
  echo
}
###############################################################################
parseArgs() {
  for i in "$@"
  do
    case $i in
    --taskname)
      echo ${TASKNAME}
      exit 0
      ;;
    --op=*)
      OP=${i#*=}
      ;;
    --tempdir=*)
      TEMPDIR=${i#*=}
      ;;
    --reportdir=*)
      REPORTDIR=${i#*=}
      ;;
    --summaryfile=*)
      SUMMARYFILE=${i#*=}
      ;;
    --verbose)
      STDOUT="/dev/stdout"
      ;;
    -D*)
      MVNPASSTHRU="${MVNPASSTHRU} $i"
      ;;
    -P*)
      MVNPASSTHRU="${MVNPASSTHRU} $i"
      ;;
    esac
  done
  if [[ "${TASKNAME}" == "" || "${OP}" == "" || "${TEMPDIR}" == "" || "${REPORTDIR}" == "" || "${SUMMARYFILE}" == "" ]] ; then
    echo "Missing options"
    echo
    printUsage
    cleanupAndExit 1
  fi
  if [[ "${OP}" != "pre" && "${OP}" != "post" && "${OP}" != "report" ]] ; then
    echo "Invalid operation"
    echo
    printUsage
    cleanupAndExit 1
  fi
}
###############################################################################

parseArgs "$@"

case $OP in
  pre)
    ;;
  post)
    mvn clean package assembly:single -DgenerateDocs -DskipTests | tee "${REPORTDIR}/${TASKNAME}.out" >> $STDOUT
    exitCode=${PIPESTATUS[0]}
    echo "$exitCode" >  "${TEMPDIR}/${TASKNAME}.exitCode"
    ;;
  report)
    exitCode=$(cat "${TEMPDIR}/${TASKNAME}.exitCode")
    if [[ "$exitCode" != "0" ]] ; then
      echo "{color:red}-1 ${TASKNAME}{color}" >> "$SUMMARYFILE"
      echo ".    {color:red}-1{color} distro tarball fails with the patch" >> "$SUMMARYFILE"
         else
      echo "{color:green}+1 ${TASKNAME}{color}" >> "$SUMMARYFILE"
      echo ".    {color:green}+1{color} distro tarball builds with the patch " >> "$SUMMARYFILE"
    fi
    ;;
esac

exit 0
