# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# NB: Travis CI (dist: bionic) supports up to v3.7
# (unless we'd install a more recent version in .travis.yml)
version: '3.7'
services:
  # Backend service
  fineractmysql:
    image: mariadb:10.6
    volumes:
      - ./fineract-db/server_collation.cnf:/etc/mysql/conf.d/server_collation.cnf
      - ./fineract-db/docker:/docker-entrypoint-initdb.d:Z,ro
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: skdcnwauicn2ucnaecasdsajdnizucawencascdca
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "--password=skdcnwauicn2ucnaecasdsajdnizucawencascdca" ]
      timeout: 10s
      retries: 10
    ports:
      - "3306:3306"
  fineract-server:
    image: fineract:latest
    volumes:
      - ./fineract-provider/build/data:/data
    healthcheck:
      test: ["CMD", 'sh', '-c', 'echo -e "Checking for the availability of Fineract server deployment"; while ! nc -z "fineract-server" 8443; do sleep 1; printf "-"; done; echo -e " >> Fineract server has started";' ]
      timeout: 10s
      retries: 10
    ports:
      - 8443:8443
    depends_on:
      fineractmysql:
        condition: service_healthy
    environment:
      # TODO: env vars prefixed with "fineract_tenants_*" will be removed with one of the next releases
      #- fineract_tenants_driver=org.mariadb.jdbc.Driver
      #- fineract_tenants_url=jdbc:mariadb://fineractmysql:3306/fineract_tenants
      #- fineract_tenants_uid=root
      #- fineract_tenants_pwd=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      # NOTE: node aware scheduler
      - FINERACT_NODE_ID=1
      # NOTE: env vars prefixed "FINERACT_HIKARI_*" are used to configure the database connection pool
      - FINERACT_HIKARI_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver
      - FINERACT_HIKARI_JDBC_URL=jdbc:mariadb://fineractmysql:3306/fineract_tenants
      - FINERACT_HIKARI_USERNAME=root
      - FINERACT_HIKARI_PASSWORD=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      # ... following variables are optional; "application.properties" contains reasonable defaults (same as here)
      - FINERACT_HIKARI_MINIMUM_IDLE=3
      - FINERACT_HIKARI_MAXIMUM_POOL_SIZE=10
      - FINERACT_HIKARI_IDLE_TIMEOUT=60000
      - FINERACT_HIKARI_CONNECTION_TIMEOUT=20000
      - FINERACT_HIKARI_TEST_QUERY=SELECT 1
      - FINERACT_HIKARI_AUTO_COMMIT=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_PREP_STMTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_PREP_STMT_CACHE_SIZE=250
      - FINERACT_HIKARI_DS_PROPERTIES_PREP_STMT_CACHE_SQL_LIMIT=2048
      - FINERACT_HIKARI_DS_PROPERTIES_USE_SERVER_PREP_STMTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_USE_LOCAL_SESSION_STATE=true
      - FINERACT_HIKARI_DS_PROPERTIES_REWRITE_BATCHED_STATEMENTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_RESULT_SET_METADATA=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_SERVER_CONFIGURATION=true
      - FINERACT_HIKARI_DS_PROPERTIES_ELIDE_SET_AUTO_COMMITS=true
      - FINERACT_HIKARI_DS_PROPERTIES_MAINTAIN_TIME_STATS=false
      - FINERACT_HIKARI_DS_PROPERTIES_LOG_SLOW_QUERIES=true
      - FINERACT_HIKARI_DS_PROPERTIES_DUMP_QUERIES_IN_EXCEPTION=true
      # NOTE: env vars prefixed "FINERACT_DEFAULT_TENANTDB_*" are used to create the default tenant database
      - FINERACT_DEFAULT_TENANTDB_HOSTNAME=fineractmysql
      - FINERACT_DEFAULT_TENANTDB_PORT=3306
      - FINERACT_DEFAULT_TENANTDB_UID=root
      - FINERACT_DEFAULT_TENANTDB_PWD=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      - FINERACT_DEFAULT_TENANTDB_CONN_PARAMS=
      - FINERACT_DEFAULT_TENANTDB_TIMEZONE=Asia/Kolkata
      - FINERACT_DEFAULT_TENANTDB_IDENTIFIER=default
      - FINERACT_DEFAULT_TENANTDB_NAME=fineract_default
      - FINERACT_DEFAULT_TENANTDB_DESCRIPTION=Default Demo Tenant

  # Frontend service
  community-app:
    image: openmf/community-app:latest
    container_name: mifos-ui
    restart: always
    ports:
      - 9090:80
    depends_on:
      fineract-server:
        condition: service_healthy
