- name: 'Create MySQL database with name: {{ nextcloud_dbname }}'
  mysql_db:
    name: "{{ nextcloud_dbname }}"

- name: Add username/password to the MySQL database (associated with trusted IP's like localhost)
  mysql_user:
    name: "{{ nextcloud_dbuser }}"
    host: "{{ item }}"
    password: "{{ nextcloud_dbpassword }}"
    priv: "{{ nextcloud_dbname }}.*:ALL,GRANT"
  with_items:
#    - 127.0.0.1
#    - ::1
    - localhost


# https://docs.nextcloud.com/server/latest/admin_manual/installation/command_line_installation.html
- name: Create data dir {{ nextcloud_data_dir }} ({{ apache_user }}:{{ apache_user }})
  file:
    state: directory
    path: "{{ nextcloud_data_dir }}"    # /library/www/nextcloud/data
    owner: "{{ apache_user }}"          # www-data on debuntu
    group: "{{ apache_user }}"

# 1 of 3: Very Old Way... from OwnCloud days
#- name: Install {{ nextcloud_root_dir }}/config/autoconfig.php from template
#  template:
#    src: autoconfig.php.j2
#    dest: "{{ nextcloud_root_dir }}/config/autoconfig.php"
#    owner: "{{ apache_user }}"
#    group: "{{ apache_user }}"
#    mode: '0640'

# 2 of 3: Another Possible Way... not quite ready for prime time
# - name: Set 'datadirectory' to {{ nextcloud_data_dir }} in {{ nextcloud_root_dir }}/config/config.php
#   lineinfile:
#     path: "{{ nextcloud_root_dir }}/config/config.php"
#     regexp: "^  'datadirectory' => "
#     insertafter: '^\$CONFIG = array \('
#     line: "  'datadirectory' => '{{ nextcloud_data_dir }}',"

- name: "Run 'php {{ nextcloud_root_dir }}/occ status' to determine if Nextcloud is installed (causing INSTALL WIZARD TO FAIL in the next step)"
  shell: >
    php {{ nextcloud_root_dir }}/occ status |
    gawk '/installed:/ { print $3 }'
  become: yes
  become_user: "{{ apache_user }}"
  register: returned

# 3 of 3: NEW WAY IN 2020... use --data-dir "{{ nextcloud_data_dir }}"
# https://docs.nextcloud.com/server/latest/admin_manual/installation/command_line_installation.html
# https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#command-line-installation-label
# ...page lists alternative 'occ' commands.  If Nextcloud's already installed,
# attempting 'maintenance:install' (below) also lists these options:
#   app:install
#   maintenance:data-fingerprint
#   maintenance:mimetype:update-db
#   maintenance:mimetype:update-js
#   maintenance:mode
#   maintenance:repair
#   maintenance:theme:update
#   maintenance:update:htaccess
- name: Run Nextcloud initial install wizard, seeding data dir {{ nextcloud_data_dir }} (IF THIS FAILS, CONSIDER 'sudo mysql' THEN 'DROP DATABASE {{ nextcloud_dbname }};' THEN RERUN THIS)
  shell: >
    cd {{ nextcloud_root_dir }};
    php occ maintenance:install
    --database "mysql"
    --database-name "{{ nextcloud_dbname }}"
    --database-user "{{ nextcloud_dbuser }}"
    --database-pass "{{ nextcloud_dbpassword }}"
    --admin-user "{{ nextcloud_admin_user }}"
    --admin-pass "{{ nextcloud_admin_password }}"
    --data-dir "{{ nextcloud_data_dir }}"
  become: yes
  become_user: "{{ apache_user }}"
  when: returned.stdout == "false"    # and nextcloud_enabled
  #when: nextcloud_installed is undefined
  #args:
  #  creates: "{{ nextcloud_root_dir }}/SOME_FILE"    # /library/www/nextcloud/SOME_FILE


# https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html#php-fpm-configuration-notes
- name: Set 'clear_env = no' in /etc/php/{{ php_version }}/fpm/pool.d/www.conf
  lineinfile:
    path: "/etc/php/{{ php_version }}/fpm/pool.d/www.conf"
    regexp: '^clear_env'
    insertafter: ';.*clear_env'
    line: 'clear_env = no'

- name: 'Allow Nextcloud access from all hosts and IP addresses -- SEE ALSO THE OLD WAY: https://github.com/iiab/iiab/blob/master/roles/nextcloud/templates/nextcloud.conf.j2.unused'
  command: php {{ nextcloud_root_dir }}/occ config:system:set trusted_domains 1 --value=*
  become: yes
  become_user: "{{ apache_user }}"