#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# ---------- source helpers first (so log/die are available) ----------------
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/common.sh"

# ---------- environment variables ------------------------------------------

MC_VERSION="${MC_VERSION:-}"
MC_LOADER="${MC_LOADER:-}"
MC_LOADER_VERSION="${MC_LOADER_VERSION:-}"

FABRIC_LOADER_VERSION="${FABRIC_LOADER_VERSION:-${MC_LOADER_VERSION:-}}"
FORGE_VERSION="${FORGE_VERSION:-${MC_LOADER_VERSION:-}}"
NEOFORGE_VERSION="${NEOFORGE_VERSION:-${MC_LOADER_VERSION:-}}"
PAPER_BUILD="${PAPER_BUILD:-}"

JAVA_VERSION="${JAVA_VERSION:-}"
JAVA_HOME="/data/java/${JAVA_VERSION}"
JAR="${JAR:-server.jar}"

XMS="${XMS:-2G}"
XMX="${XMX:-4G}"

ADD_ARGS="${ADD_ARGS:-}"

PUID="${PUID:-1000}"
PGID="${PGID:-1000}"

PATH="${JAVA_HOME}/bin:$PATH"

# ---------- validate required vars early -----------------------------------

if [[ -z "$MC_LOADER" ]]; then
  die "MC_LOADER is required. Valid: vanilla, paper, fabric, forge, neoforge, bedrock"
fi

if [[ "$MC_LOADER" != "bedrock" ]]; then
  if [[ -z "$MC_VERSION" ]]; then
    die "MC_VERSION is required for ${MC_LOADER} loader"
  fi
fi

# ---------- source libraries ------------------------------------------------

# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/java.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/server.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/vanilla.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/paper.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/fabric.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/forge.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/neoforge.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/bedrock.sh"

# ---------- main flow -------------------------------------------------------

setperms
setEula

if [[ "$MC_LOADER" != "bedrock" ]]; then
  javaCheck
fi

serverSelect

if [[ "$MC_LOADER" != "bedrock" ]]; then
  buildCommand
fi

serverStart
