#!/usr/bin/env bash

# Copyright 2015 TappingStone, Inc.
#
# 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.

cygwin=false
case "`uname`" in
    CYGWIN*) cygwin=true;;
esac

SCALA_VERSION=2.10

# Figure out where PredictionIO is installed
FWDIR="$(cd `dirname $0`/..; pwd)"

# Export this as PIO_HOME
export PIO_HOME="${FWDIR}"

. ${FWDIR}/bin/load-pio-env.sh

. ${FWDIR}/bin/semver.sh

if [ -z "$1" ]; then
  echo "Usage: pio-class <class> [<args>]" 1>&2
  exit 1
fi

# Warn if log4j.properties is not present
if [ ! -f "$FWDIR/conf/log4j.properties" ]; then
  echo -e "\033[0;35mWarning: log4j.properties is missing from $FWDIR/conf\033[0m"
fi

# Make sure the Apache Spark version meets the prerequisite if it is a binary
# distribution
MIN_SPARK_VERSION="1.3.0"
if [ -z "$SPARK_HOME" ]; then
  echo -e "\033[0;31mSPARK_HOME must be set in conf/pio-env.sh, or in the environment!\033[0m"
  exit 1
elif [ -r "$SPARK_HOME/RELEASE" ]; then
  SPARK_VERSION=`head -n 1 $SPARK_HOME/RELEASE | awk '{print $2}'`
  if [ -z "$SPARK_VERSION" ]; then
    echo -e "\033[0;35m$SPARK_HOME contains an empty RELEASE file. This is a known problem with certain vendors (e.g. Cloudera). Please make sure you are using at least $MIN_SPARK_VERSION.\033[0m"
  elif semverLT ${SPARK_VERSION} ${MIN_SPARK_VERSION}; then
    echo -e "\033[0;31mYou have Apache Spark $SPARK_VERSION at $SPARK_HOME which does not meet the minimum version requirement of $MIN_SPARK_VERSION.\033[0m"
    echo -e "\033[0;31mAborting.\033[0m"
    exit 1
  fi
else
  echo -e "\033[0;35m$SPARK_HOME is probably an Apache Spark development tree. Please make sure you are using at least $MIN_SPARK_VERSION.\033[0m"
fi

# Find the java binary
if [ -n "${JAVA_HOME}" ]; then
  RUNNER="${JAVA_HOME}/bin/java"
else
  if [ `command -v java` ]; then
    RUNNER="java"
  else
    echo -e "\033[0;31mJAVA_HOME is not set\033[0m" >&2
    exit 1
  fi
fi

# Compute classpath using external script
classpath_output=$(${FWDIR}/bin/compute-classpath.sh)
if [[ "$?" != "0" ]]; then
  echo "$classpath_output"
  exit 1
else
  CLASSPATH=${classpath_output}
fi

export CLASSPATH

exec "$RUNNER" -cp "$CLASSPATH" $JAVA_OPTS "$@"
