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

{
    local top = self,

    Server(name):: {
        local server = self,
        local cfg = server.cfg,

        cfg:: {
            namespace: error "namespace must be set",
            storageClassName: "waw-hdd-redundant-3",

            image: "openrct2/openrct2-cli:0.3.5.1",
            save: error "save must be set",

            password: "", # disabled if empty.

            admins: {
                q3k: "1e44d2ac315b9120b4dad868f1635417b1522073",
            },
        },

        metadata:: {
            namespace: cfg.namespace,
        },

        volumeClaim: kube.PersistentVolumeClaim(name) {
            metadata+: server.metadata,
            storage:: "5Gi",
            storageClass:: cfg.storageClassName,
        },

        config: kube.ConfigMap(name + "-config") {
            metadata+: server.metadata,

            // admins with local server as co-admin
            local admins = cfg.admins + {
                openrct2: "",
            },
            data: {
                "users.json": std.manifestJson([
                    { hash: admins[name], name: name, groupId: 0 }
                    for name in std.objectFields(admins)
                ]),
                "run.sh": |||
                    set -ex
                    set -o pipefail

                    SAVES=/home/openrct2/.config/OpenRCT2/save/autosave
                    if [ -d "$SAVES" ]; then
                        echo "Save directory exists, checking for autosaves..."
                        latest="$SAVES/$(ls -Art "$SAVES" | tail -n 1)"
                        if [ -f "$latest" ]; then
                            echo "Found new autosave: $latest"
                            export OPENRCT2_SAVE="$latest"
                        fi
                    fi

                    echo "Running save $OPENRCT2_SAVE..."
                    if [ ! -z "$OPENRCT2_PASSWORD" ]; then
                        echo "Running with password..."
                        openrct2-cli host "$OPENRCT2_SAVE" --password "$OPENRCT2_PASSWORD"
                    else
                        echo "Running without password..."
                        openrct2-cli host "$OPENRCT2_SAVE"
                    fi
                |||
            },
        },

        deployment: kube.Deployment(name) {
            metadata+: server.metadata,
            spec+: {
                template+: {
                    spec+: {
                        volumes_: {
                            data: kube.PersistentVolumeClaimVolume(server.volumeClaim),
                            config: kube.ConfigMapVolume(server.config),
                        },

                        initContainers: [
                            kube.Container("configure-users") {
                                image: cfg.image,
                                command: [
                                    "/bin/bash", "-c",
                                    "cp /config/users.json /home/openrct2/.config/OpenRCT2/users.json",
                                ],
                                volumeMounts_: {
                                    data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
                                    config: { mountPath: "/config" },
                                },
                            },
                        ],
                        containers_: {
                            server: kube.Container("server") {
                                image: cfg.image,
                                env_: {
                                    OPENRCT2_SAVE: cfg.save,
                                    OPENRCT2_PASSWORD: cfg.password,
                                },
                                command: [
                                    "/bin/bash", "/config/run.sh",
                                ],
                                ports_: {
                                    client: { containerPort: 11753 },
                                },
                                volumeMounts_: {
                                    data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
                                    config: { mountPath: "/config" },
                                },
                                resources: {
                                    requests: {
                                        cpu: "500m",
                                        memory: "100Mi",
                                    },
                                    limits: {
                                        cpu: "1",
                                        memory: "1Gi",
                                    },
                                },
                            },
                        },
                    },
                },
            },
        },

        svc: kube.Service(name) {
            metadata+: server.metadata,
            target_pod:: server.deployment.spec.template,
            spec+: {
                ports: [
                    { name: "client", port: 11753, targetPort: 11753, protocol: "TCP" },
                ],
                type: "LoadBalancer",
                externalTrafficPolicy: "Local",
            },
        },
    },

    servers: {
        alcatraz: top.Server("openrct2-q3k-gravity-gardens") {
            cfg+: {
                namespace: "personal-q3k",
                save: "https://object.ceph-eu.hswaw.net/q3k-personal/53fbf23e507866ae4863f937c93a961ac666a3f588b52492a9642b9384d38324.sv6",
            },
        },
    },
}
