{ config, pkgs, lib, ... }:
let
  keaReservationsPreformat = lib.attrsets.mapAttrsToList (name: val: {
    hostname = val.hostname;
    hw-address = name;
    ip-address = val.ip;
  });
in {
  services.kea = {
    dhcp4 = {
      enable = true;
      settings = {
        interfaces-config = { interfaces = [ "lan" "bms" ]; };

        lease-database = {
          name = "/var/lib/kea/dhcp4.leases";
          persist = true;
          type = "memfile";
        };

        rebind-timer = 300;
        renew-timer = 150;
        valid-lifetime = 600;

        # yanked from https://kea.readthedocs.io/en/latest/arm/dhcp4-srv.html#setting-fixed-fields-in-classification
        # if i understand correctly, the logic is reversed to what isc-dhcp
        # config did, but result should be the same
        client-classes = [{
          name = "ipxe_efi_x64";
          test = "option[93].hex == 0x0009";
          boot-file-name = "netboot.xyz.efi";
        }];

        subnet4 = [
          { # general members area lan
            subnet = "10.8.0.0/16";
            pools = [{ pool = "10.8.0.20 - 10.8.0.199"; }];
            reservations-out-of-pool = false;
            reservations-in-subnet = true;
            authoritative = true;

            next-server = "10.8.1.2";

            option-data = [
              {
                name = "routers";
                data = "10.8.1.2";
              }
              {
                name = "domain-name-servers";
                data = "10.8.1.2";
              }
              {
                name = "boot-file-name";
                data = "netboot.xyz.kpxe";
              }
            ];

            reservations = keaReservationsPreformat {
              # cat old-dhcpd.conf | sed -e 's/;//g' | awk '
              #   $1 == "host" { hostname = $2; pp = "yes"; }
              #   $1 == "hardware" { hwaddr = $3; }
              #   $1 == "fixed-address" { ip = $2; }
              #   $1 == "}" && pp == "yes" {
              #       print "\"" hwaddr "\" = { ip = \"" ip "\"; hostname = \"" hostname "\"; };"
              #       pp = "no"
              #   }'
              "00:0e:35:1d:a1:a4" = { ip = "10.8.1.18"; hostname = "laser"; };
              "00:1b:a9:24:96:e2" = { ip = "10.8.1.21"; hostname = "brother"; };
              "00:07:4d:4d:71:e4" = { ip = "10.8.1.22"; hostname = "zebra"; };
              "00:30:C1:62:61:23" = { ip = "10.8.1.23"; hostname = "lj2100"; };
              "5c:cf:7f:06:9a:3e" = { ip = "10.8.1.25"; hostname = "dht21"; };
              "00:0A:35:00:01:22" = { ip = "10.8.1.26"; hostname = "ledpanel"; };
              "b8:27:eb:ed:df:f9" = { ip = "10.8.1.17"; hostname = "printmaster"; };
              "02:20:f5:20:6a:2d" = { ip = "10.8.1.30"; hostname = "3printers1cups"; };
              "fe:77:d6:83:26:b1" = { ip = "10.8.1.31"; hostname = "telelele"; };
              "b8:27:eb:03:69:01" = { ip = "10.8.1.32"; hostname = "vending"; };
              "b0:38:29:2e:5d:c9" = { ip = "10.8.1.33"; hostname = "transcend"; };
              "b8:27:eb:37:9e:6e" = { ip = "10.8.1.34"; hostname = "welcomer"; };
              "00:23:ae:6f:8e:a7" = { ip = "10.8.1.35"; hostname = "arcade"; };
              "90:e6:ba:84:b6:e0" = { ip = "10.8.1.38"; hostname = "inventory"; };
              "52:54:00:1f:63:1b" = { ip = "10.8.1.39"; hostname = "camera"; };
              # RIPE Atlas Probe
              "c0:25:e9:99:fb:e8" = { ip = "10.8.1.43"; hostname = "ripeatlas"; };
              "6c:ad:f8:52:4c:a7" = { ip = "10.8.1.47"; hostname = "chromecast"; };
              # craptrap VM
              "52:54:00:D9:DB:42" = { ip = "10.8.1.48"; hostname = "winbox"; };
              "02:42:24:75:eb:19" = { ip = "10.8.1.49"; hostname = "staszkecoin"; };
              "00:23:14:b0:ec:c8" = { ip = "10.8.1.51"; hostname = "blitzloop"; };
              "00:1f:16:1c:47:df" = { ip = "10.8.1.52"; hostname = "tronxy"; };
              "dc:a6:32:b1:68:d7" = { ip = "10.8.1.53"; hostname = "tv1"; };
              "dc:a6:32:b1:68:83" = { ip = "10.8.1.54"; hostname = "tv2"; };
              # kodak
              "d8:3a:dd:f5:72:32" = { ip = "10.8.1.55"; hostname = "akamanto"; };
              # voron
              "b8:27:eb:55:ad:a0" = { ip = "10.8.1.56"; hostname = "karasutengu"; };
              # czechu's prusa mini
              "10:9c:70:08:84:89" = { ip = "10.8.1.57"; hostname = "prusamini"; };
              "00:17:c8:d9:2e:08" = { ip = "10.8.1.58"; hostname = "kyocera"; };
              # rpi3b with flashrom setup
              "b8:27:eb:c5:64:1c" = { ip = "10.8.1.59"; hostname = "flashpi"; };
            };
          }
          { # bms
            subnet = "10.11.1.0/24";
            pools = [{ pool = "10.11.1.100 - 10.11.1.200"; }];
            reservations-out-of-pool = false;
            reservations-in-subnet = true;
            authoritative = true;

            option-data = [
              {
                name = "routers";
                data = "10.11.1.1";
              }
              {
                name = "domain-name-servers";
                data = "10.11.1.1";
              }
            ];
          }
        ];
      };
    };
  };

  users.users.kea = {
    group = "kea";
    isSystemUser = true;
  };
  users.groups.kea = {};

  systemd.services.kea-dhcp4-server.serviceConfig = {
    UMask = lib.mkForce "0033";
    DynamicUser = lib.mkForce false;
  };
}
