---

- name: Read extra files
  block:
    - name: Run integrity check for core
      command: "php occ integrity:check-core --output=json"
      args:
        chdir: "{{ nextcloud_installation_dir }}"
      register: nextcloud_integrity_core
      become: true
      become_user: "{{ nextcloud_file_owner }}"
      failed_when: false
      changed_when: false

    - name: Run integrity check for apps
      command: "php occ integrity:check-app {{ item }} --output=json"
      args:
        chdir: "{{ nextcloud_installation_dir }}"
      register: nextcloud_integrity_apps
      loop: >-
        {{
          (
            nextcloud_installed_apps.enabled
            | combine(nextcloud_installed_apps.disabled)
          ).keys()
          | list
        }}
      changed_when: false
      failed_when: false
      become: true
      become_user: "{{ nextcloud_file_owner }}"

    - name: Extract extra files that need deletion
      set_fact:
        nextcloud_extra_files: >-
          [
            {%- for result in nextcloud_integrity_apps.results -%}
              {%- set appname=result.item -%}
              {%- set files=(result.stdout_lines[-1] | from_json) -%}
              {%- if files is mapping and 'EXTRA_FILE' in files -%}
                "{{ []
                  | zip_longest(
                    files['EXTRA_FILE'].keys(),
                    fillvalue=("apps/" ~ appname)
                  )
                  | map('join', '/')
                  | list
                  | join('","') }}"
                  ,
              {%- endif -%}
            {%- endfor -%}
            {%- set files=(
                  nextcloud_integrity_core.stdout_lines[-1]
                  | from_json
                )
            -%}
            {%- if files is mapping and 'EXTRA_FILE' in files -%}
              '{{ files["EXTRA_FILE"].keys() | join("','") }}'
            {%- endif -%}
          ]

- name: Delete extra files
  block:
    # Using `command` instead of `file` with a loop to make it (much) faster.
    - name: Delete files found by integrity check
      command: >-
        rm -f '{{ nextcloud_extra_files | join("' '") }}'
      args:
        chdir: "{{ nextcloud_installation_dir }}"
        warn: false

    - name: Re-run integrity check for core to update integrity results
      command: "php occ integrity:check-core --output=json"
      args:
        chdir: "{{ nextcloud_installation_dir }}"
      become: true
      become_user: "{{ nextcloud_file_owner }}"
      failed_when: false
      changed_when: false

    - name: Re-run integrity check for apps to update integrity results
      command: "php occ integrity:check-app {{ item }} --output=json"
      args:
        chdir: "{{ nextcloud_installation_dir }}"
      loop: >-
        {{
        (
        nextcloud_installed_apps.enabled
        | combine(nextcloud_installed_apps.disabled)
        ).keys()
        | list
        }}
      changed_when: false
      failed_when: false
      become: true
      become_user: "{{ nextcloud_file_owner }}"
  when: nextcloud_extra_files | length > 0