#!/bin/bash

. ${SCRIPTS:-/}start-utils
set -o pipefail
isDebugging && set -x

# PaperMC API v2 docs : https://papermc.io/api/docs/swagger-ui/index.html?configUrl=/api/openapi/swagger-config

build=$(curl -fsSL "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}" -H  "accept: application/json" \
 | jq '.builds[-1]')
case $? in
  0)
    ;;
  22)
    versions=$(curl -fsSL "https://papermc.io/api/v2/projects/paper" -H  "accept: application/json")
    if [[ $VERSION = LATEST ]]; then
        VANILLA_VERSION=$(echo "$versions" | jq -r '.versions[-1]')
        log "WARN: using ${VANILLA_VERSION} since that's the latest provided by PaperMC"
        # re-execute the current script with the newly computed version
        exec $0 "$@"
    fi
    log "ERROR: ${VANILLA_VERSION} is not published by PaperMC"
    log "       Set VERSION to one of the following: "
    log "       $(echo "$versions" | jq -r '.versions | join(", ")')"
    exit 1
    ;;
  *)
    echo "ERROR: unknown error while looking up PaperMC version=${VANILLA_VERSION}"
    exit 1
    ;;
esac
if [ $? != 0 ]; then
  echo "ERROR: failed to lookup PaperMC build from version ${VANILLA_VERSION}"
  exit 1
fi

export SERVER=$(curl -fsSL "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}/builds/${build}" -H  "accept: application/json" \
 | jq -r '.downloads.application.name')
if [ $? != 0 ]; then
  echo "ERROR: failed to lookup PaperMC download file from version=${VANILLA_VERSION} build=${build}"
  exit 1
fi

if [ -f "$SERVER" ]; then
  zarg=(-z "$SERVER")
fi

log "Downloading PaperMC $VANILLA_VERSION (build $build) ..."
curl -fsSL -o "$SERVER" "${zarg[@]}" \
  "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}/builds/${build}/downloads/${SERVER}" \
  -H  "accept: application/java-archive"
if [ $? != 0 ]; then
  echo "ERROR: failed to download PaperMC from version=${VANILLA_VERSION} build=${build} download=${SERVER}"
  exit 1
fi

# Normalize on Spigot for downstream operations
export TYPE=SPIGOT
export SKIP_LOG4J_CONFIG=true

# Continue to Final Setup
exec ${SCRIPTS:-/}start-finalSetupWorld $@
