---

- name: Load role-specific secrets via sops
  community.sops.load_vars:
    file: "{{ role_path }}/vars/secrets.sops.yaml"

- name: Ensure monitoring directory exists
  ansible.builtin.file:
    path: "{{ monitoring_project_dir }}"
    state: directory
    owner: admin
    group: admin
    mode: "0755"

# Copy template file that requires Jinja2 rendering (contains variables like {{ grafana_admin_user }})
- name: Copy docker-compose.yml for monitoring
  ansible.builtin.template:
    src: docker-compose.yml.j2
    dest: "{{ monitoring_project_dir }}/docker-compose.yml"
    owner: admin
    group: admin
    mode: "0644"

# Copy static files from files/ directory (no Jinja2 processing)
# These files contain Prometheus template variables (like {{ $labels.instance }}) 
# which should not be processed by Jinja2

- name: Find all static files recursively in files directory
  ansible.builtin.find:
    paths: "{{ role_path }}/files"
    recurse: true
    file_type: file
  register: all_static_files
  delegate_to: localhost
  run_once: true

- name: Ensure all required subdirectories exist for static files
  ansible.builtin.file:
    path: "{{ monitoring_project_dir }}/{{ item.path | regex_replace('^' + role_path + '/files/', '') | dirname }}"
    state: directory
    owner: admin
    group: admin
    mode: "0755"
  loop: "{{ all_static_files.files }}"
  loop_control:
    label: "{{ item.path | basename }}"
  when: item.path | dirname | regex_replace('^' + role_path + '/files/', '') != ''
  # Create directories only for files in subdirectories

- name: Copy all static files recursively (no Jinja2 processing)
  ansible.builtin.copy:
    src: "{{ item.path | regex_replace('^' + role_path + '/files/', '') }}"
    dest: "{{ monitoring_project_dir }}/{{ item.path | regex_replace('^' + role_path + '/files/', '') }}"
    owner: admin
    group: admin
    mode: "0644"
  loop: "{{ all_static_files.files }}"
  loop_control:
    label: "{{ item.path | basename }}"

- name: Deploy monitoring docker compose stack
  community.docker.docker_compose_v2:
    project_src: "{{ monitoring_project_dir }}"
    state: present
    # always recreate to ensure the latest configuration is applied
    recreate: always
    remove_orphans: true
    wait: true

- name: Ensure loki volume owner
  become: true
  ansible.builtin.file:
    path: /var/lib/docker/volumes/monitoring_loki-data/_data
    owner: "10001"
    group: "10001"

- name: Verify monitoring service is running
  ansible.builtin.uri:
    url: "http://localhost:9090/metrics"
    method: GET
    status_code: [200]
  retries: 10
  delay: 5
