---

- name: Create user groups
  command: php occ group:add "{{ item }}"
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  loop: >-
    {{
      nextcloud_users
      | map(attribute='groups')
      | flatten
      | list
      | unique
    }}
  register: result
  changed_when: result is success
  failed_when:
    result is failed and result.stdout is not search('already exists')
  become: true
  become_user: "{{ nextcloud_file_owner }}"

- name: Get user info
  command: php occ user:info "{{ item.name }}" --output=json
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  register: _nextcloud_user_info
  loop: "{{ nextcloud_users }}"
  changed_when: false
  become: true
  become_user: "{{ nextcloud_file_owner }}"

- name: Add users to groups
  command: php occ group:adduser "{{ item.1 }}" "{{ item.0.name }}"
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  loop: "{{ nextcloud_users | subelements('groups') }}"
  when: >-
    item.1 not in
    (
      _nextcloud_user_info.results
      | map(attribute='stdout')
      | map('from_json')
      | selectattr('user_id', 'equalto', item.0.name)
      | first
    ).groups
  become: true
  become_user: "{{ nextcloud_file_owner }}"