services:
  function:
    platform: linux/amd64
    build:
      context: .
      target: deploy
      args:
        version: "local-dev"
        AWS_ACCOUNT: "086679231553"
    volumes:
      - ./generate_flowthrough_adjustments:/var/task/generate_flowthrough_adjustments:cached
      - ./config.py:/var/task/config.py:cached
      - ./app.py:/var/task/app.py:cached
      - ${SNOWFLAKE_PRIVATE_KEY_PATH:-/dev/null}:/tmp/rsa_key.p8
    ports:
      - "9000:8080"
    environment:
      - DD_ENV=dev
      - DD_SERVICE=lambda-abacus-generate-flowthrough-adjustments
      - DD_AGENT_HOST=dev-datadog-agent.dev.theorchard.io
      - DD_TRACE_ENABLED=true
      - DD_SERVERLESS_FLUSH_STRATEGY=periodically,1
      - LOG_LEVEL=INFO
      - ENVIRONMENT=dev
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - AWS_REGION
      - SNOWFLAKE_ROLE=$SNOWFLAKE_ROLE
      - SNOWFLAKE_ACCOUNT=delphi.us-east-1
      - SNOWFLAKE_USER=$SNOWFLAKE_USER
      - SNOWFLAKE_DATABASE=$SNOWFLAKE_DATABASE
      - SNOWFLAKE_SCHEMA=$SNOWFLAKE_SCHEMA
      - SNOWFLAKE_WAREHOUSE=$SNOWFLAKE_WAREHOUSE
      - SNOWFLAKE_PRIVATE_KEY_PATH=/tmp/rsa_key.p8
      - SNOWFLAKE_KEY_PASSPHRASE=$SNOWFLAKE_KEY_PASSPHRASE

  lint-and-test:
    platform: linux/amd64
    build:
      context: .
      target: unit-lint
      args:
        AWS_ACCOUNT: "086679231553"
    volumes:
      - ./generate_flowthrough_adjustments:/var/task/generate_flowthrough_adjustments:cached
      - ./config.py:/var/task/config.py:cached
      - ./app.py:/var/task/app.py:cached
      - ${SNOWFLAKE_PRIVATE_KEY_PATH:-/dev/null}:/tmp/rsa_key.p8
      - ./tests:/var/task/tests:cached
    command: ./lint-and-test.sh
    environment:
      - SKIP_LINT=0
      - TEST_ARGS=-v
      - COV_REPORT=term  # --cov-report pytest-cov option or OFF (try html!)
      - ENVIRONMENT=dev
      - RUN_INTEGRATION=0

  lockfile:
    platform: linux/amd64
    build:
      context: .
      target: base
      args:
        AWS_ACCOUNT: "086679231553"
    volumes:
      - ./:/var/task:cached
    entrypoint: ["uv"]
    command: ["lock", "--upgrade"]

  # MySQL database for testing
  mysql:
    image: mysql:8.0.36
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=royalty_accounting
      - MYSQL_USER=royalties
      - MYSQL_PASSWORD=1234
    ports:
      - "6991:3306"
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot" ]
      interval: 5s
      timeout: 5s
      retries: 20
      start_period: 30s

  # Database migration runner
  liquibase-runner:
    image: 437795906767.dkr.ecr.us-east-1.amazonaws.com/royalties-liquibase-runner:latest
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      - MYSQL_DB_HOST=mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_NAME=royalty_accounting
      - MYSQL_DEPLOY_USER=root
      - MYSQL_DEPLOY_PASSWORD=root
      - MYSQL_SERVICE_USER=royalties
      - GITHUB_USER=theorchard
      - GITHUB_REPO=database
      - GITHUB_BRANCH=master
      - GITHUB_REPO_DIR=royalty_accounting
      # AWS credentials for accessing resources
      - AWS_ACCESS_KEY_ID
      - AWS_DEFAULT_REGION=us-east-1
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN

  # ows-royalties service for testing
  ows-royalties:
    image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-royalties:latest
    depends_on:
      - liquibase-runner
    environment:
      - MYSQL_DB_HOST=mysql
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_NAME=royalty_accounting
    ports:
      - "6992:8080"

  # Deployed Lambda image from ECR (for testing deployed builds)
  lambda:
    image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/lambda-abacus-generate-flowthrough-adjustments:latest
    volumes:
      - ${SNOWFLAKE_PRIVATE_KEY_PATH:-/dev/null}:/var/task/rsa_key.p8
    depends_on:
      - ows-royalties
      - mysql
    environment:
      - ENVIRONMENT=dev

      - DD_ENV=dev
      - DD_SERVICE=lambda-abacus-generate-flowthrough-adjustments
      - DD_AGENT_HOST=dev-datadog-agent.dev.theorchard.io
      - DD_TRACE_ENABLED=true
      - DD_SERVERLESS_FLUSH_STRATEGY=periodically,1

      - S3_BUCKET_NAME=qa-abacus-adjustments
      - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN

      - FIVETRAN_SCHEMA=$FIVETRAN_SCHEMA
      - SNOWFLAKE_HOST=$SNOWFLAKE_HOST
      - SNOWFLAKE_ROLE=$SNOWFLAKE_ROLE
      - SNOWFLAKE_ACCOUNT=$SNOWFLAKE_ACCOUNT
      - SNOWFLAKE_USER=$SNOWFLAKE_USER
      - SNOWFLAKE_PRIVATE_KEY_PATH=/var/task/rsa_key.p8
      - SNOWFLAKE_KEY_PASSPHRASE=$SNOWFLAKE_KEY_PASSPHRASE
      - SNOWFLAKE_DATABASE=$SNOWFLAKE_DATABASE
      - SNOWFLAKE_SCHEMA=$SNOWFLAKE_SCHEMA
      - SNOWFLAKE_WAREHOUSE=$SNOWFLAKE_WAREHOUSE

      - OWSREQUEST_SERVICE_MAP={"ows-royalties":"http://ows-royalties:8080"}
    ports:
      - "6993:8080"

  # Integration tests
  integration-test:
    platform: linux/amd64
    build:
      context: .
      target: unit-lint
      args:
        AWS_ACCOUNT: "086679231553"
    depends_on:
      - lambda
    volumes:
      - ./generate_flowthrough_adjustments:/var/task/generate_flowthrough_adjustments:cached
      - ./config.py:/var/task/config.py:cached
      - ./app.py:/var/task/app.py:cached
      - ./tests:/var/task/tests:cached
    ports:
      - "8000:8000"
    command: ./lint-and-test.sh
    environment:
      - SKIP_LINT=1
      - TEST_ARGS=-vv
      - COV_REPORT=term  # --cov-report pytest-cov option or OFF (try html!)
      - ENVIRONMENT=dev
      - RUN_INTEGRATION=1
      - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
