{ config, lib, ... }:

let
  servers = {
    atm6 = "atm6.alicehuston.xyz";
    stoneblock3 = "sb3.alicehuston.xyz";
    RAD2 = "rad.alicehuston.xyz";
    skyfactory = "sf.alicehuston.xyz";
    divinejourney = "dj.alicehuston.xyz";
    rlcraft = "rlcraft.alicehuston.xyz";
    arcanum-institute = "arcanum.alicehuston.xyz";
    bcg-plus = "bcg.alicehuston.xyz";
  };

  defaultServer = "rlcraft";

  defaultEnv = {
    EULA = "true";
    TYPE = "AUTO_CURSEFORGE";
    STOP_SERVER_ANNOUNCE_DELAY = "120";
    STOP_DURATION = "600";
    SYNC_CHUNK_WRITES = "false";
    USE_AIKAR_FLAGS = "true";
    MEMORY = "8GB";
    ALLOW_FLIGHT = "true";
    MAX_TICK_TIME = "-1";
  };

  defaultOptions = [
    "--stop-signal=SIGTERM"
    "--stop-timeout=1800"
    "--network=minecraft-net"
  ];

  vars = import ../vars.nix;
  minecraft_path = "${vars.primary_games}/minecraft";
in
{
  virtualisation.oci-containers.containers = {
    mc-router = {
      image = "itzg/mc-router:latest";
      extraOptions = [
        "--network=haproxy-net"
        "--network=minecraft-net"
      ];
      cmd = [
        (
          "--mapping=mc.alicehuston.xyz=${defaultServer}:25565"
          + (lib.rad-dev.mapAttrsToString (hostname: url: "," + url + "=" + hostname + ":25565") servers)
        )
      ];
    };
    # rlcraft = {
    #   image = "itzg/minecraft-server:java8";
    #   volumes = [
    #     "${minecraft_path}/rlcraft/modpacks:/modpacks:ro"
    #     "${minecraft_path}/rlcraft/data:/data"
    #   ];
    #   hostname = "rlcraft";
    #   environment = defaultEnv // {
    #     VERSION = "1.12.2";
    #     CF_SLUG = "rlcraft";
    #     DIFFICULTY = "hard";
    #     ENABLE_COMMAND_BLOCK = "true";
    #   };
    #   extraOptions = defaultOptions;
    #   log-driver = "local";
    #   environmentFiles = [ config.sops.secrets."docker/minecraft".path ];
    # };
    bcg-plus = {
      image = "itzg/minecraft-server:java17";
      volumes = [
        "${minecraft_path}/bcg-plus/modpacks:/modpacks:ro"
        "${minecraft_path}/bcg-plus/data:/data"
      ];
      hostname = "bcg-plus";
      environment = defaultEnv // {
        VERSION = "1.17";
        CF_SLUG = "bcg";
        DIFFICULTY = "normal";
        DEBUG = "true";
        # ENABLE_COMMAND_BLOCK = "true";
      };
      extraOptions = defaultOptions;
      log-driver = "local";
      environmentFiles = [ config.sops.secrets."docker/minecraft".path ];
    };
  };

  sops = {
    defaultSopsFile = ../secrets.yaml;
    secrets = {
      "docker/minecraft".owner = "docker-service";
    };
  };
}