{ config, pkgs, lib, ... }:
with lib;
let
  cfg = config.dadada.ddns;
  ddnsConfig = hostNames: {
    systemd.timers = listToAttrs (forEach hostNames (hostname: nameValuePair "ddns-${hostname}"
    { 
      wantedBy = [ "timers.target" ];
      partOf = [ "ddns-${hostname}.service" ];
      timerConfig.OnCalendar = "hourly";
    }));

    systemd.services = listToAttrs (forEach hostNames (hostname: nameValuePair "ddns-${hostname}"
    {
      serviceConfig.Type = "oneshot";
      script = ''
        function url() {
          echo "https://svc.joker.com/nic/update?username=$1&password=$2&hostname=$3"
        }

        IFS=':'
        read -r user password < /var/lib/ddns/credentials
        unset IFS

        curl_url=$(url "$user" "$password" ${hostname})

        ${pkgs.curl}/bin/curl -4 "$curl_url"
        ${pkgs.curl}/bin/curl -6 "$curl_url"
      '';
    }));
  };
in {
  options = {
    dadada.ddns.domains = mkOption {
      type = types.listOf types.str;
      description = ''
          Enables DDNS for these domains.
      '';
      example = ''
        [ "example.com" ]
      '';
      default = [];
    };
  };

  config = ddnsConfig cfg.domains;
}