---

- ansible.builtin.debug:
    msg: "Compressing room `{{ room_details.room_id }}` having {{ room_details.count }} state group rows"

- name: Generate rust-synapse-compress-state room compression command
  ansible.builtin.set_fact:
    matrix_synapse_rust_synapse_compress_state_compress_room_command: >-
      {{ matrix_host_command_docker }} run --rm --name matrix-rust-synapse-compress-state-compress-room
      --user={{ matrix_user_uid }}:{{ matrix_user_gid }}
      --cap-drop=ALL
      --network={{ matrix_docker_network }}
      --mount type=bind,src={{ matrix_synapse_rust_synapse_compress_state_base_path }},dst=/work
      {{ matrix_synapse_rust_synapse_compress_state_docker_image }}
      {{ matrix_synapse_rust_synapse_compress_state_synapse_compress_state_in_container_path }} -t -o /work/state-compressor.sql
      -p "host={{ matrix_synapse_database_host }} user={{ matrix_synapse_database_user }} password={{ matrix_synapse_database_password }} dbname={{ matrix_synapse_database_database }}"
      -r '{{ room_details.room_id }}'

- name: Run rust-synapse-compress-state room compression command (SQL generation)
  ansible.builtin.command: "{{ matrix_synapse_rust_synapse_compress_state_compress_room_command }}"
  async: "{{ matrix_synapse_rust_synapse_compress_state_compress_room_time }}"
  poll: 10
  register: matrix_synapse_rust_synapse_compress_state_compress_room_command_result
  failed_when: not matrix_synapse_rust_synapse_compress_state_compress_room_command_result.finished
  changed_when: matrix_synapse_rust_synapse_compress_state_compress_room_command_result.finished and matrix_synapse_rust_synapse_compress_state_compress_room_command_result.rc == 0

- ansible.builtin.debug:
    var: "matrix_synapse_rust_synapse_compress_state_compress_room_command_result"

- name: Generate Postgres compression SQL import command
  ansible.builtin.set_fact:
    matrix_synapse_rust_synapse_compress_state_psql_import_command: >-
      {{ matrix_host_command_docker }} run --rm --name matrix-rust-synapse-compress-state-psql-import
      --user={{ matrix_user_uid }}:{{ matrix_user_gid }}
      --cap-drop=ALL
      --network={{ matrix_docker_network }}
      --env-file={{ matrix_postgres_base_path }}/env-postgres-psql
      --mount type=bind,src={{ matrix_synapse_rust_synapse_compress_state_base_path }},dst=/work,ro
      --entrypoint=/bin/sh
      {{ matrix_postgres_docker_image_latest }}
      -c "cat /work/state-compressor.sql |
      psql -v ON_ERROR_STOP=1 -h matrix-postgres -d {{ matrix_synapse_database_database }}"

- name: Import compression SQL into Postgres
  ansible.builtin.command: "{{ matrix_synapse_rust_synapse_compress_state_psql_import_command }}"
  async: "{{ matrix_synapse_rust_synapse_compress_state_psql_import_time }}"
  poll: 10
  register: matrix_synapse_rust_synapse_compress_state_psql_import_command_result
  failed_when: not matrix_synapse_rust_synapse_compress_state_psql_import_command_result.finished
  changed_when: matrix_synapse_rust_synapse_compress_state_psql_import_command_result.finished and matrix_synapse_rust_synapse_compress_state_psql_import_command_result.rc == 0

- name: Clean up
  ansible.builtin.file:
    path: "{{ matrix_synapse_rust_synapse_compress_state_base_path }}/state-compressor.sql"
    state: absent
