{% include 'roles/docker-compose/templates/base.yml.j2' %}
  synapse:
{% set container_port = 8008 %}
    image: "{{ MATRIX_SYNAPSE_IMAGE }}:{{ MATRIX_SYNAPSE_VERSION }}"
    container_name: {{ MATRIX_SYNAPSE_NAME }}
    restart: {{ DOCKER_RESTART_POLICY }}
    logging:
      driver: {{ "json-file" if IS_CONTAINER | bool else 'journald' }}
    volumes:
      - synapse_data:/data
      - {{ MATRIX_SYNAPSE_CONFIG_PATH_HOST }}:{{ MATRIX_SYNAPSE_CONFIG_PATH_CONTAINER }}:ro
      - {{ MATRIX_SYNAPSE_LOG_PATH_HOST }}:{{ MATRIX_SYNAPSE_LOG_PATH_CONTAINER }}:ro
{% for item in MATRIX_BRIDGES %}
      - {{ docker_compose.directories.instance }}mautrix/{{ item.bridge_name }}/registration.yaml:{{ MATRIX_REGISTRATION_FILE_FOLDER }}{{ item.bridge_name }}.registration.yaml:ro
{% endfor %}
    environment:
      - SYNAPSE_SERVER_NAME={{ MATRIX_SYNAPSE_DOMAIN }}
      - SYNAPSE_REPORT_STATS=no
    ports:
      - "127.0.0.1:{{ports.localhost.http['web-app-matrix_synapse']}}:{{ container_port }}"
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
{% if MATRIX_BRIDGES | length > 0 %}
{% for item in MATRIX_BRIDGES %}
      mautrix-{{ item.bridge_name }}:
        condition: service_healthy
{% endfor %}
{% else %}
{% endif %}
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
  element:
{% set container_port = 80 %}
    image: "{{ MATRIX_ELEMENT_IMAGE }}:{{ MATRIX_ELEMENT_VERSION }}"
    container_name: {{ MATRIX_ELEMENT_NAME }}
    restart: {{ DOCKER_RESTART_POLICY }}
    volumes:
      - {{ MATRIX_ELEMENT_CONFIG_PATH_HOST }}:/app/config.json
    ports:
      - "127.0.0.1:{{ MATRIX_ELEMENT_PORT }}:{{ container_port }}"
{% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}

{% for item in MATRIX_BRIDGES %}
  mautrix-{{ item.bridge_name }}:
    container_name: matrix-{{ item.bridge_name }}
    image: dock.mau.dev/mautrix/{{ item.bridge_name }}:latest
    restart: {{ DOCKER_RESTART_POLICY }}
    volumes:
      - ./mautrix/{{ item.bridge_name }}:/data
    healthcheck:
      test: ["CMD-SHELL", "test -f {{ MATRIX_REGISTRATION_FILE_FOLDER }}registration.yaml || exit 1"]
      interval: 1m
      timeout: 10s
      retries: 3
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% endfor %}
{% if applications | get_app_conf(application_id, 'plugins.chatgpt', True) | bool %}
  matrix-chatgpt-bot:
    restart: {{ DOCKER_RESTART_POLICY }}
    container_name: matrix-chatgpt
    image: ghcr.io/matrixgpt/matrix-chatgpt-bot:latest
    volumes:
      - chatgpt_data:/storage
    environment:
      OPENAI_API_KEY: '{{ applications | get_app_conf(application_id, 'credentials.chatgpt_bridge_openai_api_key', True)}}'
      # Uncomment the next two lines if you are using Azure OpenAI API
      # OPENAI_AZURE: 'false'
      # CHATGPT_REVERSE_PROXY: 'your-completion-endpoint-here'
      CHATGPT_CONTEXT: 'thread'
      CHATGPT_API_MODEL: 'gpt-3.5-turbo'
      # Uncomment and edit the next line if needed
      # CHATGPT_PROMPT_PREFIX: 'Instructions:\nYou are ChatGPT, a large language model trained by OpenAI.'
      # CHATGPT_IGNORE_MEDIA: 'false'
      CHATGPT_REVERSE_PROXY: 'https://api.openai.com/v1/chat/completions'
      # Uncomment and edit the next line if needed
      # CHATGPT_TEMPERATURE: '0.8'
      # Uncomment and edit the next line if needed
      #CHATGPT_MAX_CONTEXT_TOKENS: '4097'
      CHATGPT_MAX_PROMPT_TOKENS: '3000'
      KEYV_BACKEND: 'file'
      KEYV_URL: ''
      KEYV_BOT_ENCRYPTION: 'false'
      KEYV_BOT_STORAGE: 'true'
      MATRIX_HOMESERVER_URL: '{{ MATRIX_SYNAPSE_URL }}'
      MATRIX_BOT_USERNAME: '@chatgptbot:{{ MATRIX_SERVER_NAME }}'
      MATRIX_ACCESS_TOKEN: '{{ applications | get_app_conf(application_id, 'credentials.chatgpt_bridge_access_token', True) | default('') }}'
      MATRIX_BOT_PASSWORD: '{{ applications | get_app_conf(application_id, 'credentials.chatgpt_bridge_user_password', True) }}'
      MATRIX_DEFAULT_PREFIX: '!chatgpt'
      MATRIX_DEFAULT_PREFIX_REPLY: 'false'
      #MATRIX_BLACKLIST: ''
      MATRIX_WHITELIST: ':{{ MATRIX_SERVER_NAME }}'
      MATRIX_AUTOJOIN: 'true'
      MATRIX_ENCRYPTION: 'true'
      MATRIX_THREADS: 'true'
      MATRIX_PREFIX_DM: 'false'
      MATRIX_RICH_TEXT: 'true'
{% endif %}

{% include 'roles/docker-compose/templates/volumes.yml.j2' %}
  synapse_data:
    name: {{ MATRIX_SYNAPSE_VOLUME }}
{% if applications | get_app_conf(application_id, 'plugins.chatgpt', True) | bool %}
  chatgpt_data:
{% endif %}

{% include 'roles/docker-compose/templates/networks.yml.j2' %}