{
  config,
  lib,
  namespace,
  ...
}:
with lib;
let
  cfg = config.${namespace}.services.netbootxyz;
in
{
  imports = [ ./options.nix ];

  config = mkIf cfg.enable {
    # Open firewall for netbootxyz if enabled
    networking.firewall = mkIf cfg.openFirewall {
      allowedTCPPorts = [
        cfg.webPort
        cfg.assetPort
        cfg.tftpPort
      ];
      allowedUDPPorts = [
        cfg.webPort
        cfg.assetPort
        cfg.tftpPort
      ];
    };

    virtualisation.oci-containers = {
      containers.netbootxyz = {
        autoStart = true;
        image = "ghcr.io/netbootxyz/netbootxyz:latest";
        ports = [
          "${toString cfg.webPort}:3000"
          "${toString cfg.assetPort}:80"
          "${toString cfg.tftpPort}:69"
        ];
        volumes = [
          "${cfg.dataDir}:/config"
          "${cfg.assetDir}:/assets"
        ];
      };
    };
  };
}
