{% from "apt/map.jinja" import apt as apt_map with context %}
{% set apt = pillar.get('apt', {}) %}
{% set remove_sources_list = apt.get('remove_sources_list', apt_map.remove_sources_list) %}
{% set clean_sources_list_d = apt.get('clean_sources_list_d', apt_map.clean_sources_list_d) %}
{% set sources_list_dir = apt.get('sources_list_dir', apt_map.sources_list_dir) %}
{% set repositories = apt.get('repositories', apt_map.repositories) %}
{% set default_url = apt.get('default_url', apt_map.default_url) %}
{% set keyring_package = apt.get('keyring_package', apt_map.default_keyring_package) %}

{{ keyring_package }}:
  pkg.installed:
    - name: {{ keyring_package }}

/etc/apt/sources.list:
  file.managed:
    - mode: '0644'
    - user: root
    - group: root
  {% if remove_sources_list %}
    - contents: ''
    - contents_newline: False
  {% else %}
    - replace: False
  {% endif %}

{{ sources_list_dir }}:
  file.directory:
    - mode: '0755'
    - user: root
    - group: root
    - clean: {{ clean_sources_list_d }}

{% for repo, args in repositories.items() %}

{% set r_opts = '' %}
{%- set r_arch = 'arch=' ~ args.arch|join(',') if args.arch is defined else '' %}
{% if args.opts is defined %}
  {% if args.opts is string %}
    {% set r_opts = args.opts %}
  {% else %}
    {% set r_opts_list = [] %}
    {%- for k, v in args.opts.items() %}
      {% do r_opts_list.append(k ~ '=' ~ v) %}
    {%- endfor %}
    {% set r_opts =  r_opts_list|join(' ') %}
  {% endif %}
{% endif %}

{% if r_arch != '' or r_opts != '' %}
  {% set r_options = '[' ~ r_arch ~ ' ' ~ r_opts ~ ' ]' %}
{% else %}
  {% set r_options = '' %}
{% endif %}

{%- set r_url = args.url or default_url %}
{%- set r_distro = args.distro or 'stable' %}
{%- set r_comps = args.comps|default(['main'])|join(' ') %}
{%- set r_keyserver = args.keyserver if args.keyserver is defined else apt_map.default_keyserver %}

  {%- for type in args.type|d(['binary']) %}
  {%- set r_type = 'deb-src' if type == 'source' else 'deb' %}

{{ r_type }} {{ repo }}:
  pkgrepo.managed:
    - name: {{ r_type }} {{ r_options }} {{ r_url }} {{ r_distro }} {{ r_comps }}
    - file: {{ sources_list_dir }}/{{ repo }}-{{ type }}.list
    {# You can use either keyid+keyserver or key_url. If both are provided
       the latter will be used. #}
    {% if args.key_url is defined %}
    - key_url: {{ args.key_url }}
    {% elif args.key_text is defined %}
    - key_text: {{ args.key_text }}
    {% elif args.keyid is defined %}
    - keyid: {{ args.keyid }}
    - keyserver: {{ r_keyserver }}
    {% endif %}
    - clean_file: true
    - refresh: False
    - refresh_db: False
    - onchanges_in:
      - module: apt.refresh_db

  {%- endfor %}
{% endfor %}

{% if repositories %}
apt.refresh_db:
  module.run:
    - name: pkg.refresh_db
{% endif %}