version: '3.2'

services:
  mobymask-watcher-db:
    restart: unless-stopped
    image: postgres:14-alpine
    environment:
      - POSTGRES_USER=vdbm
      - POSTGRES_MULTIPLE_DATABASES=mobymask-watcher,mobymask-watcher-job-queue
      - POSTGRES_EXTENSION=mobymask-watcher-job-queue:pgcrypto
      - POSTGRES_PASSWORD=password
    volumes:
      - ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
      - mobymask_watcher_db_data:/var/lib/postgresql/data
    ports:
      - "0.0.0.0:15432:5432"
    healthcheck:
      test: ["CMD", "nc", "-v", "localhost", "5432"]
      interval: 20s
      timeout: 5s
      retries: 15
      start_period: 10s

  mobymask:
    restart: unless-stopped
    image: cerc/mobymask:local
    working_dir: /app/packages/server
    depends_on:
      op-node:
        condition: service_healthy
      op-geth:
        condition: service_healthy
    # TODO: Configure env file for ETH RPC URL & private key
    environment:
      - ENV=PROD
    command: ["sh", "./deploy-invite.sh"]
    volumes:
      # TODO: add a script to set rpc endpoint from env
      #       add manually if running seperately
      - ../config/watcher-mobymask-v2/secrets-template.json:/app/packages/server/secrets-template.json
      - ../config/watcher-mobymask-v2/deploy-invite.sh:/app/packages/server/deploy-invite.sh
      - moby_data_server:/app/packages/server
      - fixturenet_geth_accounts:/geth-accounts:ro
    healthcheck:
      test: ["CMD", "nc", "-v", "localhost", "3330"]
      interval: 20s
      timeout: 5s
      retries: 15
      start_period: 10s

  mobymask-watcher-server:
    # TODO: pass optimism rpc endpoint
    restart: unless-stopped
    depends_on:
      mobymask-watcher-db:
        condition: service_healthy
      mobymask:
        condition: service_healthy
    image: cerc/watcher-mobymask-v2:local
    command: ["sh", "server-start.sh"]
    volumes:
      # TODO: add a script to set rpc endpoint from env
      #       add manually if running seperately
      - ../config/watcher-mobymask-v2/watcher-config-template.toml:/app/packages/mobymask-v2-watcher/environments/watcher-config-template.toml
      - ../config/watcher-mobymask-v2/peer.env:/app/packages/peer/.env
      - ../config/watcher-mobymask-v2/relay-id.json:/app/packages/mobymask-v2-watcher/relay-id.json
      - ../config/watcher-mobymask-v2/peer-id.json:/app/packages/mobymask-v2-watcher/peer-id.json
      - ../config/watcher-mobymask-v2/server-start.sh:/app/packages/mobymask-v2-watcher/server-start.sh
      - moby_data_server:/server
      - fixturenet_geth_accounts:/geth-accounts:ro
    ports:
      - "0.0.0.0:3001:3001"
      - "0.0.0.0:9001:9001"
      - "0.0.0.0:9090:9090"
    healthcheck:
      test: ["CMD", "busybox", "nc", "localhost", "9090"]
      interval: 20s
      timeout: 5s
      retries: 15
      start_period: 5s

  # TODO: Move to a separate pod
  mobymask-app:
    depends_on:
      mobymask-watcher-server:
        condition: service_healthy
      mobymask:
        condition: service_healthy
    image: cerc/mobymask-ui:local
    command: ["sh", "mobymask-app-start.sh"]
    volumes:
      - ../config/watcher-mobymask-v2/mobymask-app.env:/app/.env
      - ../config/watcher-mobymask-v2/mobymask-app-config.json:/app/src/mobymask-app-config.json
      - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/app/mobymask-app-start.sh
      - moby_data_server:/server
    ports:
      - "0.0.0.0:3002:3000"
    healthcheck:
      test: ["CMD", "nc", "-v", "localhost", "3000"]
      interval: 20s
      timeout: 5s
      retries: 15
      start_period: 10s
    shm_size: '1GB'

  peer-test-app:
    depends_on:
      mobymask-watcher-server:
        condition: service_healthy
    image: cerc/react-peer:local
    working_dir: /app/packages/test-app
    command: ["sh", "-c", "yarn build && serve -s build"]
    volumes:
      - ../config/watcher-mobymask-v2/test-app-config.json:/app/packages/test-app/src/config.json
    ports:
      - "0.0.0.0:3003:3000"
    healthcheck:
      test: ["CMD", "nc", "-v", "localhost", "3000"]
      interval: 20s
      timeout: 5s
      retries: 15
      start_period: 10s

volumes:
  mobymask_watcher_db_data:
  moby_data_server:
  fixturenet_geth_accounts:
