---
services:
  dev:
    platform: linux/amd64
    build:
      context: .
      target: dev
    volumes:
      - ./video:/var/app/video
    ports:
      - "5000:5000"
    environment:
      - Environment=dev
      - CLOUDFRONT_KEY_PAIR_ID=CLOUDFRONT_KEY_PAIR_ID
      - CLOUDFRONT_PRIVATE_KEY=CLOUDFRONT_PRIVATE_KEY
      - VIDEO_DB_USER=${TEST_VIDEO_DB_USER}
      - ows_video_password=${TEST_VIDEO_DB_PASS}
      - VIDEO_DB_HOST=${TEST_VIDEO_DB_HOST}
      - VIDEO_DB_NAME=${TEST_VIDEO_DB_NAME}
      - VIDEO_DB_CONNECTION_CHARSET=utf8mb4
      - AR_DB_USER=${TEST_DB_USER}
      - ar_db_password=${TEST_DB_PASS}
      - AR_DB_HOST=${TEST_DB_HOST}
      - AR_DB_NAME=${TEST_DB_NAME}
      - AR_DB_CONNECTION_CHARSET=utf8mb4
    env_file:
      - path: ./.env
        required: false
    depends_on:
      test-video-db:
        condition: service_healthy
      test-ar-db:
        condition: service_healthy

  unit-lint:
    extends:
      file: docker-compose.unit-lint.yml
      service: unit-lint

  update-snapshots:
    extends:
      file: docker-compose.unit-lint.yml
      service: unit-lint
    volumes:
      - ./tests:/var/app/tests
    environment:
      - SKIP_LINT=1
      - SKIP_TYPE_CHECKS=1
      - TEST_ARGS=--snapshot-update

  integration:
    platform: linux/amd64
    build:
      context: .
      target: integration
    environment:
      - Environment=qa
      - AWS_REGION=us-east-1
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - AR_DB_HOST=qa.db.qaorch.com
      - AR_DB_NAME=art_relations
      - AR_DB_USER=ows-video
      - TEST_ARGS=-v

  deploy:
    platform: linux/amd64
    build:
      context: .
      target: deploy
    ports:
      - "8080:8080"
    environment:
      - Environment=qa
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
    env_file:
      - path: ./.env
        required: false

  test-video-db:
    platform: linux/amd64
    image:
      086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-database-images:ows-video
    pull_policy: always
    ports:
      - "3306:3306"
    environment:
      DB_USER: ${TEST_VIDEO_DB_USER}
      DB_PASSWORD: ${TEST_VIDEO_DB_PASS}
    command: >
      --sql_mode=STRICT_TRANS_TABLES
      --disable-log-bin
    tmpfs:
      - /var/lib/mysql
    healthcheck:
      interval: 1s
      timeout: 5s
      retries: 180

  test-ar-db:
    platform: linux/amd64
    image:
      086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-database-images:art-relations
    pull_policy: always
    ports:
      - "3307:3306"
    environment:
      DB_USER: ${TEST_DB_USER}
      DB_PASSWORD: ${TEST_DB_PASS}
    command: >
      --sql_mode=STRICT_TRANS_TABLES
      --disable-log-bin
    tmpfs:
      - /var/lib/mysql
    healthcheck:
      interval: 1s
      timeout: 5s
      retries: 180

  format:
    platform: linux/amd64
    build:
      context: .
      target: format
    volumes:
      - ./:/var/app

  update-lockfile:
    platform: linux/amd64
    build:
      context: .
      target: update-lockfile
    volumes:
      - ./poetry.lock:/var/app/poetry.lock

  moto:
    image: motoserver/moto:5.1.2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:5000/moto-api/"]
      interval: 1s
      timeout: 60s
