#!/bin/bash

. ${SCRIPTS:-/}start-utils

: ${ENV_VARIABLE_PREFIX:=CFG_}

if isTrue "${REPLACE_ENV_VARIABLES}"; then
  log "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX ..."

  # File excludes
  fileExcludes=
  for f in ${REPLACE_ENV_VARIABLES_EXCLUDES}; do
    fileExcludes="${fileExcludes} -not -name $f"
  done

  # Directory excludes (recursive)
  dirExcludes=$(join_by " -o -path " ${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS})
  if [[ $dirExcludes ]]; then
    dirExcludes=" -type d ( -path ${dirExcludes} ) -prune -o"
  fi

  isDebugging && echo "Using find file exclusions: $fileExcludes"
  isDebugging && echo "Using find directory exclusions: $dirExcludes"

  for name in $(compgen -v $ENV_VARIABLE_PREFIX); do
    # check if name of env variable matches the prefix
    # sanity check environment variables to avoid code injections
    # Read content from file environment
    if [[ $name = *"_FILE" ]]; then
      value=$(<${!name})
      name="${name%_FILE}"
    else
      value=${!name}
    fi

    log "Replacing $name with $value ..."

    value=${value//\\/\\\\}
    value=${value//#/\\#}

    find /data/ \
        $dirExcludes \
        -type f \
        \( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \
        -or -name "*.conf" -or -name "*.properties" -or -name "*.hjson" -or -name "*.json" \) \
        $fileExcludes \
        -exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \;
  done
fi

exec ${SCRIPTS:-/}start-minecraftFinalSetup $@
