#!/bin/bash

# shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"

# The Dockerfile ENVs take precedence here, but defaulting for testing consistency
: "${UID:=1000}"
: "${GID:=1000}"

umask 0002
chmod g+w /data

if isTrue "${ENABLE_RCON:-true}" && ! [ -v RCON_PASSWORD ] && ! [ -v RCON_PASSWORD_FILE ]; then
  RCON_PASSWORD=$(openssl rand -hex 12)
  export RCON_PASSWORD
fi

if ! isTrue "${SKIP_SUDO:-false}" && [ "$(id -u)" = 0 ]; then
  runAsUser=minecraft
  runAsGroup=minecraft

  # For rcon-cli access running via exec, which by default is running as root
  echo "password=${RCON_PASSWORD}" > "$HOME/.rcon-cli.env"

  if [[ -v UID ]]; then
    if [[ $UID != 0 ]]; then
      if [[ $UID != $(id -u minecraft) ]]; then
        log "Changing uid of minecraft to $UID"
        usermod -u $UID minecraft
      fi
    else
      runAsUser=root
    fi
  fi

  if [[ -v GID ]]; then
    if [[ $GID != 0 ]]; then
      if [[ $GID != $(id -g minecraft) ]]; then
        log "Changing gid of minecraft to $GID"
        groupmod -o -g "$GID" minecraft
      fi
    else
      runAsGroup=root
    fi
  fi

  if [[ $(stat -c "%u" /data) != "$UID" ]]; then
    log "Changing ownership of /data to $UID ..."
    chown -R ${runAsUser}:${runAsGroup} /data
  fi

  if [[ ${SKIP_NSSWITCH_CONF^^} != TRUE ]]; then
    echo 'hosts: files dns' > /etc/nsswitch.conf
  fi

  distro=$(getDistro)
  if [[ $distro == alpine ]]; then
    exec su-exec ${runAsUser}:${runAsGroup} "${SCRIPTS:-/}start-configuration" "$@"
  else
    exec gosu ${runAsUser}:${runAsGroup} "${SCRIPTS:-/}start-configuration" "$@"
  fi
else
  exec "${SCRIPTS:-/}start-configuration" "$@"
fi
