---
{%- from "nginx/map.jinja" import nginx with context -%}
{%- for configfile in nginx.config.files %}
nginx-config-{{ configfile }}:
  file.managed:
    - name: {{ nginx.config.dir }}/{{ configfile }}
    - source: salt://nginx/templates/{{ configfile }}.j2
    - template: jinja
    - user: {{ nginx.config.user }}
    - group: {{ nginx.config.group }}
    - watch_in:
      - service: nginx-service
    #- watch:
    #  - pki: pki-fetched
    #- require:
    #  - sls: acme.*
{%- endfor %}

nginx-default-index-file:
  file.managed:
    - name: /var/www/html/index.html
    - user: root
    - group: root
    - contents: "<html><head></head><body></body></html>"

nginx-config-wipe-default:
  file.absent:
    - name: /etc/nginx/sites-enabled/default

{%- for subdir in nginx.config.subdirs %}
nginx-config-dir-{{ subdir }}:
  file.directory:
    - name: {{ nginx.config.dir }}/{{ subdir }}
    - user: {{ nginx.config.user }}
    - group: {{ nginx.config.group }}
    - watch_in:
      - service: nginx-service
{%- endfor %}

{%- for name, vhost in nginx.vhosts.items() %}
nginx-sites-available-{{ name }}:
  file.managed:
    - name: {{ nginx.config.dir }}/sites-available/{{ name }}
    - source: salt://nginx/templates/types/{{ vhost.type }}.j2
    - template: jinja
    - user: {{ nginx.config.user }}
    - group: {{ nginx.config.group }}
    - require:
      - file: nginx-config-dir-sites-available
      - file: nginx-config-dir-sites-enabled
    - watch_in:
      - service: nginx-service
    - context:
        vhost_name: {{ name }}
        sub: {{ vhost.sub|default([]) }}
        config_dir: {{ nginx.config.dir }}
        https: {{ vhost.https|default(true) }}
        proxy: {{ vhost.proxy|default(false) }}
        proxy_pass: {{ vhost.proxy_pass|default("") }}
        cache: {{ vhost.cache|default(true) }}
        autoindex: {{ vhost.autoindex|default(false) }}
        webdav: {{ vhost.webdav|default(false) }}
        root_dir: {{ vhost.root_dir|default(none) }}
        internal: {{ vhost.internal|default(false) }}
        auth: {{ vhost.auth|default(false) }}
        dirs: {{ vhost.dirs|default([]) }}
        headers: {{ vhost.headers|default({}) }}
        php_socket_file: {{ nginx.config.php_socket_file }}
        geoip: {{ nginx.config.geoip }}

nginx-site-enabled-{{ name }}:
  file.symlink:
    - name: {{ nginx.config.dir }}/sites-enabled/{{ name }}
    - target: {{ nginx.config.dir }}/sites-available/{{ name }}
    - template: jinja
    - user: {{ nginx.config.user }}
    - group: {{ nginx.config.group }}
    - require:
      - file: nginx-config-dir-sites-available
      - file: nginx-config-dir-sites-enabled
      - nginx-sites-available-{{ name }}
    - watch_in:
      - service: nginx-service
{%- endfor %}