---
  - set_fact: postgresql_installed="true"

  - name: Adding APT repository key
    become: yes
    apt_key:
      id: ACCC4CF8
      url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
    tags:
      - postgresql
      - db
      - repo

  - name: Add PostgreSQL official APT repository
    become: yes
    apt_repository:
      repo: "deb http://apt.postgresql.org/pub/repos/apt/ {{ansible_distribution_release}}-pgdg main"
    tags:
      - postgresql
      - db
      - repo

  - name: Install PostgreSQL
    become: yes
    apt:
      name: "{{item}}"
      state: present
      update_cache: yes
      cache_valid_time: 3600
    with_items:
      - "postgresql-{{postgresql_version}}"
      - "postgresql-client-{{postgresql_version}}"
      - "libpq-dev"
    tags:
      - postgresql
      - db
      - deps

  - name: "Detect python3"
    shell: "which python3"
    register: is_python3

  - name: Ensure pip is installed (python3)
    when: is_python3 is succeeded
    apt:
      name: python3-pip
      state: present
      update_cache: yes

  - name: Install psycopg2 (python3)
    when: is_python3 is succeeded
    become: yes
    pip:
      name: psycopg2
      break_system_packages: true

  - name: Install psycopg2 (python2)
    when: is_python3 is failed
    become: yes
    apt:
      name: python-psycopg2
      state: latest

  - name: Create postgresql user
    postgresql_user:
      name: "{{database_user}}"
      password: "{{database_password}}"
      state: present
    become: true
    become_user: postgres

  - name: Create postgresql database
    postgresql_db:
      name: "{{database_name}}"
      owner: "{{database_user}}"
      template: template1
      state: present
    become: true
    become_user: postgres

  - name: Grant all privileges on database to user
    postgresql_privs:
      database: "{{database_name}}"
      privs: ALL
      roles: "{{database_user}}"
      state: present
      type: database
    become: true
    become_user: postgres

  - name: "Enable postgres hstore"
    become: true
    become_user: postgres
    postgresql_ext:
      db: "{{database_name}}"
      name: hstore
      state: present

  - import_tasks: backups.yml
    become: true

  - name: Grab Psql version
    shell: psql --version
    register: stats_psql_version
    when: send_stats == true and stats_url is defined and stats_api_key is defined
    tags:
      - maintenance
      - stats

  - name: Send Psql stats to URL
    uri:
      url: "{{stats_url}}"
      method: POST
      headers:
        X-API-Version: 1
        X-Client-Api-key: "{{stats_api_key}}"
      body_format: json
      body:
        client_stat:
          key: psql_version
          value: "{{stats_psql_version.stdout}}"
          hostname: "{{hostname}}"
    when: send_stats == true and stats_url is defined and stats_api_key is defined
    tags:
      - maintenance
      - stats