---

- name: Get user list
  command: php occ user:list --output=json
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  register: nextcloud_online_users
  changed_when: false
  become: true
  become_user: "{{ nextcloud_file_owner }}"

# There might be non-json lines that break parsing.
- name: Remove non-json text from command output
  set_fact:
    nextcloud_online_users: >-
      {{
        (
          nextcloud_online_users.stdout
          | regex_replace('^[^{]*(.*)$', '\1')
          | from_json
        ).keys()
        | list
      }}

- name: Create users
  command: >-
    php occ user:add
      "{{ item.name }}"
      --display-name "{{ item.display_name }}"
      --password-from-env
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  when: item.name not in nextcloud_online_users
  environment:
    OC_PASS: "{{ item.pass }}"
  loop: "{{ nextcloud_users }}"
  become: true
  become_user: "{{ nextcloud_file_owner }}"

- name: Update user password
  command: php occ user:resetpassword "{{ item.name }}" --password-from-env
  args:
    chdir: "{{ nextcloud_installation_dir }}"
  when:
    - item.resetpassword | default(False)
    - item.name in nextcloud_online_users
  environment:
    OC_PASS: "{{ item.pass }}"
  loop: "{{ nextcloud_users }}"
  become: true
  become_user: "{{ nextcloud_file_owner }}"