#!/bin/bash

. /start-utils

set -e

function buildSpigotFromSource {
  log "Building Spigot $VANILLA_VERSION from source, might take a while, get some coffee"
  rm -rf /data/temp
  mkdir /data/temp
  cd /data/temp

  jvmOpts="-Xms${INIT_MEMORY:-$MEMORY} -Xmx${MAX_MEMORY:-$MEMORY}"

  logn ''
  curl -sSL -o /data/temp/BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && \
    java $jvmOpts -jar /data/temp/BuildTools.jar --rev $VANILLA_VERSION 2>&1 |tee /data/spigot_build.log| while read l; do echo -n .; done; log "done"
  if ! mv spigot-*.jar /data/spigot_server.jar; then
    log "ERR failed to build Spigot"
    cat /data/spigot_build.log
    exit 1
  fi
  mv craftbukkit-*.jar /data/${SERVER}
  log "Cleaning up"
  rm -rf /data/temp
  cd /data
}

function downloadSpigot {
  local match
  case "$TYPE" in
    *BUKKIT|*bukkit)
      match="CraftBukkit"
      downloadUrl=${BUKKIT_DOWNLOAD_URL}
      getbukkitFlavor=craftbukkit
      ;;
    *)
      match="Spigot"
      downloadUrl=${SPIGOT_DOWNLOAD_URL}
      getbukkitFlavor=spigot
      ;;
  esac

  if [[ -z $downloadUrl ]]; then
    downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VANILLA_VERSION}.jar"
  fi

  log "Downloading $match from $downloadUrl ..."
  curl -fsSL -o $SERVER "$downloadUrl"
  if [[ $? != 0 || $(grep -c "DOCTYPE html" $SERVER) != 0 ]]; then
    cat <<EOF

ERROR: failed to download from $downloadUrl
       Visit https://getbukkit.org/download/${getbukkitFlavor} to lookup the
       exact version, such as 1.4.6-R0.4-SNAPSHOT or 1.8-R0.1-SNAPSHOT-LATEST

EOF
    exit 3
  fi
}


case "$TYPE" in
  *BUKKIT|*bukkit)
    export SERVER=craftbukkit_server-${VANILLA_VERSION}.jar
    ;;
  *)
    export SERVER=spigot_server-${VANILLA_VERSION}.jar
    ;;
esac

if [ ! -f $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
   if [[ "$BUILD_SPIGOT_FROM_SOURCE" = TRUE || "$BUILD_SPIGOT_FROM_SOURCE" = true || "$BUILD_FROM_SOURCE" = TRUE || "$BUILD_FROM_SOURCE" = true ]]; then
     buildSpigotFromSource
   else
     downloadSpigot
   fi
fi

# Normalize on Spigot for operations below
export TYPE=SPIGOT

# Continue to Final Setup
exec /start-finalSetup01World $@
