{%- macro render_interface(i) %}
[Interface]
{%   if "private_key" in i %}
PrivateKey = {{ i.private_key }}
{%   endif %}
{%   if "address" in i %}
{%     if i.address is string %}
Address = {{ i.address }}
{%     elif i.address is sequence %}
{%       for address in i.address %}
Address = {{ address }}
{%       endfor %}
{%     endif %}
{%   endif %}
{%   if "listen_port" in i %}
ListenPort = {{ i.listen_port }}
{%   endif %}
{%   if "table" in i %}
Table = {{ i.table }}
{%   endif %}
{% endmacro -%}

{%- macro render_peer(p) %}
{%   if "comment" in p %}
# {{ p.comment }}
{%   endif %}
[Peer]
{%   if "public_key" in p %}
PublicKey = {{ p.public_key }}
{%   endif %}
{%   if "endpoint" in p %}
Endpoint = {{ p.endpoint }}
{%   endif %}
{%   if "allowed_ips" in p %}
{%     if p.allowed_ips is string %}
AllowedIPs = {{ p.allowed_ips }}
{%     elif p.allowed_ips is sequence %}
AllowedIPs = {{ p.allowed_ips | join(', ') }}
{%     endif %}
{%   endif %}
{%   if "preshared_key" in p %}
PresharedKey = {{ p.preshared_key }}
{%   endif %}
{%   if "persistent_keepalive" in p %}
PersistentKeepalive = {{ p.persistent_keepalive }}
{%   endif %}
{% endmacro -%}

{% if wireguard_interfaces[_wireguard_interface] and
      wireguard_interfaces[_wireguard_interface] is mapping %}
{{   render_interface(wireguard_interfaces[_wireguard_interface]) }}
{% endif %}
{% if wireguard_peers[_wireguard_interface] and
      wireguard_peers[_wireguard_interface] is sequence %}
{%   for peer in wireguard_peers[_wireguard_interface] %}
{{     render_peer(peer) }}
{%   endfor %}
{% endif %}