{ lib, ... }:

{
  config.services.freeswitch = {
    enable = true;
    enableReload = true;
    configTemplate = ./freeswitch;
  };

  config.environment.etc.freeswitch.source = lib.mkForce "/home/lukegb/depot/ops/nixos/lib/freeswitch";
  config.systemd.services.freeswitch-config-reload.before = lib.mkForce [];
  config.networking.firewall.extraCommands = lib.mkAfter ''
    # STUN
    iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 3478 -j ACCEPT
    ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 3478 -j ACCEPT
    iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 3479 -j ACCEPT
    ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 3479 -j ACCEPT

    # SIP
    iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 5060 -j ACCEPT
    iptables -A nixos-fw -p tcp --dst 92.118.30.19 --dport 5060 -j ACCEPT
    ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 5060 -j ACCEPT
    ip6tables -A nixos-fw -p tcp --dst 2a09:a443::1000 --dport 5060 -j ACCEPT

    # SIP + TLS
    iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 5061 -j ACCEPT
    iptables -A nixos-fw -p tcp --dst 92.118.30.19 --dport 5061 -j ACCEPT
    ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 5061 -j ACCEPT
    ip6tables -A nixos-fw -p tcp --dst 2a09:a443::1000 --dport 5061 -j ACCEPT

    # Trunk SIP
    #iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 5080 -j ACCEPT
    #iptables -A nixos-fw -p tcp --dst 92.118.30.19 --dport 5080 -j ACCEPT
    #ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 5080 -j ACCEPT
    #ip6tables -A nixos-fw -p tcp --dst 2a09:a443::1000 --dport 5080 -j ACCEPT

    # RTP
    iptables -A nixos-fw -p udp --dst 92.118.30.19 --dport 16384:32768 -j ACCEPT
    ip6tables -A nixos-fw -p udp --dst 2a09:a443::1000 --dport 16384:32748 -j ACCEPT
  '';
}