---

- name: Ensure cactus comments paths exist
  ansible.builtin.file:
    path: "{{ item.path }}"
    state: directory
    mode: 0750
    owner: "{{ matrix_user_username }}"
    group: "{{ matrix_user_groupname }}"
  with_items:
    - {path: "{{ matrix_cactus_comments_base_path }}", when: true}
    - {path: "{{ matrix_cactus_comments_client_path }}", when: true}
    - {path: "{{ matrix_cactus_comments_container_tmp_path }}", when: true}
    - {path: "{{ matrix_cactus_comments_docker_src_files_path }}", when: matrix_cactus_comments_container_image_self_build}
  when: "item.when | bool"

- name: Ensure cactus comments environment file created
  ansible.builtin.template:
    src: "{{ role_path }}/templates/env.j2"
    dest: "{{ matrix_cactus_comments_app_service_env_file }}"
    owner: "{{ matrix_user_username }}"
    group: "{{ matrix_user_groupname }}"
    mode: 0640

- name: Ensure cactus comments appservice file created
  ansible.builtin.template:
    src: "{{ role_path }}/templates/cactus_appservice.yaml.j2"
    dest: "{{ matrix_cactus_comments_app_service_config_file }}"
    owner: "{{ matrix_user_username }}"
    group: "{{ matrix_user_groupname }}"
    mode: 0640

- name: Ensure cactus comments image is pulled
  community.docker.docker_image:
    name: "{{ matrix_cactus_comments_docker_image }}"
    source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
    force_source: "{{ matrix_cactus_comments_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
    force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_cactus_comments_docker_image_force_pull }}"
  when: "not matrix_cactus_comments_container_image_self_build | bool"
  register: result
  retries: "{{ devture_playbook_help_container_retries_count }}"
  delay: "{{ devture_playbook_help_container_retries_delay }}"
  until: result is not failed

- name: Ensure cactus comments repository is present on self-build
  ansible.builtin.git:
    repo: "{{ matrix_cactus_comments_docker_repo }}"
    version: "{{ matrix_cactus_comments_docker_repo_version }}"
    dest: "{{ matrix_cactus_comments_docker_src_files_path }}"
    force: "yes"
  become: true
  become_user: "{{ matrix_user_username }}"
  register: matrix_cactus_comments_git_pull_results
  when: "matrix_cactus_comments_container_image_self_build | bool"

- name: Ensure cactus comments image is built
  community.docker.docker_image:
    name: "{{ matrix_cactus_comments_docker_image }}"
    source: build
    force_source: "{{ matrix_cactus_comments_git_pull_results.changed if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
    force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_mailer_git_pull_results.changed }}"
    build:
      dockerfile: Dockerfile
      path: "{{ matrix_cactus_comments_docker_src_files_path }}"
      pull: true
  when: "matrix_cactus_comments_container_image_self_build | bool"

- when: matrix_cactus_comments_client_local_dir | length == 0
  block:
    - name: Download client binary to local folder
      ansible.builtin.get_url:
        url: "https://gitlab.com/cactus-comments/cactus-client/-/archive/v{{ matrix_cactus_comments_client_version }}/cactus-client-v{{ matrix_cactus_comments_client_version }}.tar.gz"
        dest: "/tmp/cactus-comments-{{ matrix_cactus_comments_client_version }}.tar.gz"
        mode: '0644'
      register: _download_client
      until: _download_client is succeeded
      retries: 5
      delay: 2
      check_mode: false

    - name: Unpack client
      ansible.builtin.unarchive:
        src: "/tmp/cactus-comments-{{ matrix_cactus_comments_client_version }}.tar.gz"
        dest: "/tmp/"
        remote_src: true
        mode: 0600
      check_mode: false

    - name: Propagate client javascript file
      ansible.builtin.copy:
        src: "/tmp/cactus-client-v{{ matrix_cactus_comments_client_version }}/src/cactus.js"
        remote_src: true
        dest: "{{ matrix_cactus_comments_client_path }}/cactus.js"
        mode: "{{ matrix_cactus_comments_client_file_permissions }}"
        owner: "{{ matrix_user_username }}"
        group: "{{ matrix_user_groupname }}"
    - name: Propagate client style file
      ansible.builtin.copy:
        src: "/tmp/cactus-client-v{{ matrix_cactus_comments_client_version }}/src/style.css"
        remote_src: true
        dest: "{{ matrix_cactus_comments_client_path }}/style.css"
        mode: "{{ matrix_cactus_comments_client_file_permissions }}"
        owner: "{{ matrix_user_username }}"
        group: "{{ matrix_user_groupname }}"

- when: matrix_cactus_comments_client_local_dir | length > 0
  block:
    - name: Propagate locally distributed client javascreipt
      ansible.builtin.copy:
        src: "{{ matrix_cactus_comments_client_local_dir }}/src/cactus.js"
        dest: "{{ matrix_cactus_comments_client_path }}/cactus.js"
        mode: "{{ matrix_cactus_comments_client_file_permissions }}"
        owner: "{{ matrix_user_username }}"
        group: "{{ matrix_user_groupname }}"
    - name: Propagate locally distributed client style.css
      ansible.builtin.copy:
        src: "{{ matrix_cactus_comments_client_local_dir }}/src/style.css"
        dest: "{{ matrix_cactus_comments_client_path }}/style.css"
        mode: "{{ matrix_cactus_comments_client_file_permissions }}"
        owner: "{{ matrix_user_username }}"
        group: "{{ matrix_user_groupname }}"

- name: Ensure matrix-cactus-comments.service installed
  ansible.builtin.template:
    src: "{{ role_path }}/templates/systemd/matrix-cactus-comments.service.j2"
    dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-cactus-comments.service"
    mode: 0644