local factorio = import "factorio.libsonnet";
local proxy = import "proxy.libsonnet";
local kube = import "../../../kube/kube.libsonnet";

// This deploys factorio instances and the modproxy in the `factorio`
// Kubernetes namespace.
//
// Available factorio versions:
//  - 1.0.0-1
//  - 1.1.34-1
//  - 1.1.35-1
//  - 1.1.50-1
// See: //third_party/factorio.

{
    local prod = self,

    local ns = kube.Namespace("factorio"),

    // instance makes a factorio server with a given name and at a
    // given tag/version.
    instance(name, tag):: factorio {
        cfg+: {
            namespace: "factorio",
            prefix: name + "-",
            tag: tag,
        }
    },

    proxy: proxy {
        cfg+: {
            namespace: "factorio",
        },
    },

    local mod = function(name, version) { name: name, version: version },
    pymods: prod.instance("pymods", "1.1.50-1") {
        cfg+: {
            // Bump up to 2G/2CPU request/limit.
            resources: {
                requests: {
                    cpu: "2",
                    memory: "2Gi",
                },
                limits: self.requests,
            },
            mods: [
                // Stdlib for mods
                mod("stdlib", "1.4.6"),
                // General QOL
                // Better loaders
                mod("LoaderRedux", "1.7.1"),
                mod("LoaderReduxForFactorioExtendedPlus", "1.1.0"),
                // Trains
                mod("traintunnels", "0.0.11"),
                mod("FARL", "4.1.2"),
                // Move between buildings
                mod("Squeak Through", "1.8.2"),
                // Requirements calculator
                mod("helmod", "0.12.5"),
                // Compact loaders for easier and faster transportation
                mod("deadlock-beltboxes-loaders", "2.4.2"),
                // Better inserters
                mod("bobinserters", "1.1.0"),
                // Teleport to tags for easier movement with huge server
                mod("TagToTeleport", "1.1.1"),
                // Necessary for PYmods to get proper list of ingredients for the next step
                mod("what-is-it-really-used-for", "1.6.0"),
                // Resource monitor
                mod("YARM", "0.8.203"),
                // YEET
                mod("RenaiTransportation", "0.8.6"),

                // PYmods
                mod("pypetroleumhandling", "2.0.6"),
                mod("pyrawores", "2.2.7"),
                mod("pyraworesgraphics", "1.0.9"),
                mod("pycoalprocessing", "1.9.3"),
                mod("pycoalprocessinggraphics", "1.0.9"),
                // Resource overhaul
                mod("rso-mod", "6.2.6"),
                // mciancia
                mod("Warehousing", "0.5.2"),
                mod("AbandonedRuins", "1.1.4"),
                mod("Factorissimo2", "2.5.2"),
            ],
        },
    },
}
