---
- name: "Configure gramps application"
  hosts: all

  vars_files:
    - vars/ports.yml
    - vars/vars.yml

  vars:
    app_name: "gramps"
    app_user: "{{ primary_user }}"
    base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}"
    data_dir: "{{ (base_dir, 'data') | path_join }}"
    backups_dir: "{{ (base_dir, 'backups') | path_join }}"
    gobackup_config: "{{ (base_dir, 'gobackup.yml') | path_join }}"

  tasks:
    - name: "Create application directories"
      ansible.builtin.file:
        path: "{{ item }}"
        state: "directory"
        owner: "{{ app_user }}"
        group: "{{ app_user }}"
        mode: "0750"
      loop:
        - "{{ base_dir }}"
        - "{{ data_dir }}"
        - "{{ backups_dir }}"

    - name: "Copy gobackup config"
      ansible.builtin.template:
        src: "./files/{{ app_name }}/gobackup.yml.j2"
        dest: "{{ gobackup_config }}"
        owner: "{{ app_user }}"
        group: "{{ app_user }}"
        mode: "0640"

    - name: "Copy backup script"
      ansible.builtin.template:
        src: "files/{{ app_name }}/backup.sh.j2"
        dest: "{{ base_dir }}/backup.sh"
        owner: "{{ app_user }}"
        group: "{{ app_user }}"
        mode: "0750"

    - name: "Copy docker compose file"
      ansible.builtin.template:
        src: "./files/{{ app_name }}/docker-compose.yml.j2"
        dest: "{{ base_dir }}/docker-compose.yml"
        owner: "{{ app_user }}"
        group: "{{ app_user }}"
        mode: "0640"

    - name: "Run application with docker compose"
      community.docker.docker_compose_v2:
        project_src: "{{ base_dir }}"
        state: "present"
        remove_orphans: true