{{- define "minecraft.configuration" -}}
{{- include "minecraft.validation" $ }}
configmap:
  minecraft-config:
    enabled: true
    data:
      {{/*
      There is no GUI in the container,
      but some old versions think that there is
      */}}
      GUI: "FALSE"
      EULA: {{ .Values.mcConfig.eula | quote | upper }}
      ENABLE_RCON: {{ .Values.mcConfig.enableRcon | quote | upper }}
      SERVER_PORT: {{ .Values.mcNetwork.serverPort | quote }}
      {{ if .Values.mcConfig.enableRcon }}
      RCON_PORT: {{ .Values.mcNetwork.rconPort | quote }}
      RCON_PASSWORD: {{ .Values.mcConfig.rconPassword | quote }}
      {{ end }}
      VERSION: {{ .Values.mcConfig.version | quote }}
      TYPE: {{ .Values.mcConfig.type | quote }}
      {{ with .Values.mcConfig.seed }}
      SEED: {{ . | quote }}
      {{ end }}
      MOTD: {{ .Values.mcConfig.motd | quote }}
      DIFFICULTY: {{ .Values.mcConfig.difficulty | quote }}
      SERVER_NAME: {{ .Values.mcConfig.serverName | quote }}
      MAX_PLAYERS: {{ .Values.mcConfig.maxPlayers | quote }}
      MAX_WORLD_SIZE: {{ .Values.mcConfig.maxWorldSize | quote }}
      ALLOW_NETHER: {{ .Values.mcConfig.allowNether | quote | upper }}
      ANNOUNCE_PLAYER_ACHIEVEMENTS: {{ .Values.mcConfig.announcePlayerAchievements | quote | upper }}
      ENABLE_COMMAND_BLOCK: {{ .Values.mcConfig.enableCommandBlock | quote | upper }}
      FORCE_GAMEMODE: {{ .Values.mcConfig.forceGameMode | quote | upper }}
      GENERATE_STRUCTURES: {{ .Values.mcConfig.generateStructures | quote | upper }}
      HARDCORE: {{ .Values.mcConfig.hardcore | quote | upper }}
      MAX_BUILD_HEIGHT: {{ .Values.mcConfig.maxBuildHeight | quote }}
      SPAWN_ANIMALS: {{ .Values.mcConfig.spawnAnimals | quote | upper }}
      SPAWN_MONSTERS: {{ .Values.mcConfig.spawnMonsters | quote | upper }}
      SPAWN_NPCS: {{ .Values.mcConfig.spawnNpcs | quote | upper }}
      SPAWN_PROTECTION: {{ .Values.mcConfig.spawnProtection | quote }}
      VIEW_DISTANCE: {{ .Values.mcConfig.viewDistance | quote }}
      PVP: {{ .Values.mcConfig.pvp | quote | upper }}
      LEVEL_TYPE: {{ .Values.mcConfig.levelType | quote }}
      ALLOW_FLIGHT: {{ .Values.mcConfig.allowFlight | quote | upper }}
      ONLINE_MODE: {{ .Values.mcConfig.onlineMode | quote | upper }}
      MAX_TICK_TIME: {{ .Values.mcConfig.maxTickTime | quote }}
      {{ with .Values.mcConfig.ops }}
      OPS: {{ join "," . | quote }}
      {{ end }}
      {{ with .Values.mcConfig.whitelist }}
      WHITELIST: {{ join "," . | quote }}
      {{ end }}
{{- end -}}

{{- define "minecraft.validation" -}}
  {{- if not .Values.mcConfig.eula -}}
    {{- fail "Minecraft - You have to accept EULA" -}}
  {{- end -}}

  {{- $types := (list "VANILLA" "SPIGOT" "BUKKIT" "CATSERVER" "CRUCIBLE"
                      "AUTO_CURSEFORGE" "CUSTOM" "FABRIC" "FTBA" "FORGE"
                      "LOLISERVER" "LIMBO" "MAGMA" "MODRINTH" "MOHIST"
                      "FABRIC" "PAPER" "PUFFERFISH" "PURPUR" "QUILT") -}}
  {{- if not (mustHas .Values.mcConfig.type $types) -}}
    {{- fail (printf "Minecraft - Expected [Type] to be one of [%s], but got [%s]" (join ", " $types) .Values.mcConfig.type) -}}
  {{- end -}}

  {{- $difficulties := (list "peaceful" "easy" "normal" "hard") -}}
  {{- if not (mustHas .Values.mcConfig.difficulty $difficulties) -}}
    {{- fail (printf "Minecraft - Expected [Difficulty] to be one of [%s], but got [%s]" (join ", " $difficulties) .Values.mcConfig.difficulty) -}}
  {{- end -}}

  {{- $modes := (list "creative" "survival" "adventure" "spectator") -}}
  {{- if not (mustHas .Values.mcConfig.mode $modes) -}}
    {{- fail (printf "Minecraft - Expected [Mode] to be one of [%s], but got [%s]" (join ", " $modes) .Values.mcConfig.mode) -}}
  {{- end -}}

  {{- $lvlTypes := (list "minecraft:default" "minecraft:flat" "minecraft:large_biomes"
                          "minecraft:amplified" "minecraft:single_biome_surface" "buffet" "customized") -}}
  {{- if not (mustHas .Values.mcConfig.levelType $lvlTypes) -}}
    {{- fail (printf "Minecraft - Expected [Level Type] to be one of [%s], but got [%s]" (join ", " $lvlTypes) .Values.mcConfig.levelType) -}}
  {{- end -}}

{{- end -}}
