{ name, config, lib, kubenix, images, ... }:

with lib;

let
  cfg = config.submodules.instances.passthru;
in {
  imports = with kubenix.modules; [ test submodules k8s docker ];

  test = {
    name = "k8s-submodule";
    description = "Simple k8s submodule test";
    assertions = [{
      message = "Submodule has correct name set";
      assertion = (head config.kubernetes.objects).metadata.name == "passthru";
    } {
      message = "Should expose docker image";
      assertion = (head config.docker.export).imageName == "xtruder/nginx";
    }];
  };

  kubernetes.namespace = "test-namespace";

  submodules.imports = [{
    module = {name, config, ...}: {
      imports = with kubenix.modules; [ submodule k8s docker ];

      config = {
        submodule = {
          name = "test-submodule";
          passthru = {
            kubernetes.objects = config.kubernetes.objects;
            docker.images = config.docker.images;
          };
        };

        kubernetes.resources.pods.nginx = {
          metadata.name = name;
          spec.containers.nginx.image = config.docker.images.nginx.path;
        };

        docker.images.nginx.image = images.nginx;
      };
    };
  }];

  kubernetes.api.defaults = [{
    propagate = true;
    default.metadata.labels.my-label = "my-value";
  }];

  submodules.instances.passthru = {
    submodule = "test-submodule";
  };

  submodules.instances.no-passthru = {
    submodule = "test-submodule";
    passthru.enable = false;
  };
}
