services:
    function:
        platform: linux/amd64
        build:
            context: .
            target: local
            args:
                AWS_ACCOUNT: "086679231553"
        volumes:
            - ./sync_contract_sap:/var/task/sync_contract_sap:cached
            - ./config.py:/var/task/config.py:cached
            - ./app.py:/var/task/app.py:cached
        ports:
            - "9000:8080"
        environment:
            - DD_ENV=dev
            - DD_SERVICE=lambda-abacus-sync-contract-sap
            - DD_TRACE_ENABLED=false
            - DD_ENHANCED_METRICS=false
            - DD_LOCAL_TEST=true
            - AWS_ACCESS_KEY_ID
            - AWS_SECRET_ACCESS_KEY
            - AWS_SESSION_TOKEN
            - AWS_DEFAULT_REGION=us-east-1

    lint-and-test:
        platform: linux/amd64
        build:
            context: .
            target: unit-lint
            args:
                AWS_ACCOUNT: "086679231553"
        volumes:
            - ./sync_contract_sap:/var/task/sync_contract_sap:cached
            - ./config.py:/var/task/config.py:cached
            - ./app.py:/var/task/app.py:cached
            - ./tests:/var/task/tests:cached
        command: ./lint-and-test.sh
        environment:
            - RUN_INTEGRATION=0
            - SKIP_LINT=0
            - TEST_ARGS=-v
            - COV_REPORT=term
            - ENVIRONMENT=dev

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

    test-functional:
        platform: linux/amd64
        build:
            context: .
            target: unit-lint
            args:
                AWS_ACCOUNT: "086679231553"
        volumes:
            - ./sync_contract_sap:/var/task/sync_contract_sap:cached
            - ./config.py:/var/task/config.py:cached
            - ./app.py:/var/task/app.py:cached
            - ./tests:/var/task/tests:cached
        command: ./lint-and-test.sh
        depends_on:
            sync-contract-sap-liquibase-runner:
                condition: service_completed_successfully
        environment:
            - ENVIRONMENT=dev
            - RUN_FUNCTIONAL=1
            - SKIP_LINT=1
            - TEST_ARGS=-v
            - COV_REPORT=term
            - MYSQL_DB_HOST=sync-contract-sap-mysql
            - MYSQL_DB_USER=db_user
            - MYSQL_DB_PASS=db_pass
            - MYSQL_DB_NAME=royalty_accounting
            - MYSQL_DB_PORT=3306

    test-integration:
        platform: linux/amd64
        build:
            context: .
            target: integration
            args:
                AWS_ACCOUNT: "086679231553"
        volumes:
            - ./sync_contract_sap:/var/task/sync_contract_sap:cached
            - ./config.py:/var/task/config.py:cached
            - ./app.py:/var/task/app.py:cached
            - ./tests:/var/task/tests:cached
        command: ./lint-and-test.sh
        depends_on:
            sync-contract-sap-liquibase-runner:
                condition: service_completed_successfully
            sync-contract-sap-ows-royalties:
                condition: service_started
            sync-contract-sap-ows-abacus-account:
                condition: service_started
            sync-contract-sap-ows-abacus-state:
                condition: service_started
        environment:
            - ENVIRONMENT=${ENVIRONMENT:-dev}
            # yamllint disable-line rule:line-length
            - OWSREQUEST_SERVICE_MAP={"ows-abacus-state":"http://sync-contract-sap-ows-abacus-state:8080", "ows-royalties":"http://sync-contract-sap-ows-royalties:8080", "ows-abacus-account":"http://sync-contract-sap-ows-abacus-account:8080"}
            - RUN_INTEGRATION=1
            - SKIP_LINT=1
            - TEST_ARGS=-v
            - COV_REPORT=term  # --cov-report pytest-cov option or OFF (try html!)

    sync-contract-sap-lambda:
        image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/lambda-abacus-sync-contract-sap:latest
        depends_on:
            sync-contract-sap-liquibase-runner:
                condition: service_completed_successfully
            sync-contract-sap-ows-royalties:
                condition: service_started
            sync-contract-sap-ows-abacus-account:
                condition: service_started
            sync-contract-sap-ows-abacus-state:
                condition: service_started
        environment:
            - ENVIRONMENT=${ENVIRONMENT:-dev}
            # yamllint disable-line rule:line-length
            - OWSREQUEST_SERVICE_MAP={"ows-abacus-state":"http://sync-contract-sap-ows-abacus-state:8080", "ows-royalties":"http://sync-contract-sap-ows-royalties:8080", "ows-abacus-account":"http://sync-contract-sap-ows-abacus-account:8080"}
            - sap_auth_username=${sap_auth_username}
            - sap_auth_password=${sap_auth_password}
            - SAP_ENV=6000

    sync-contract-sap-mysql:
        platform: linux/amd64
        image: mysql:8.0.36
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=royalty_accounting
            - MYSQL_USER=db_user
            - MYSQL_PASSWORD=db_pass

    sync-contract-sap-liquibase-runner:
        platform: linux/amd64
        image: 437795906767.dkr.ecr.us-east-1.amazonaws.com/royalties-liquibase-runner:latest
        depends_on:
            - sync-contract-sap-mysql
        environment:
            - MYSQL_DB_HOST=sync-contract-sap-mysql
            - MYSQL_DB_PORT=3306
            - MYSQL_DB_NAME=royalty_accounting
            - MYSQL_DEPLOY_USER=root
            - MYSQL_DEPLOY_PASSWORD=root
            - MYSQL_SERVICE_USER=db_user
            - GITHUB_USER=theorchard
            - GITHUB_REPO=database
            - GITHUB_BRANCH=master
            - GITHUB_REPO_DIR=royalty_accounting

    sync-contract-sap-ows-royalties:
        platform: linux/amd64
        image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-royalties:latest
        depends_on:
            - sync-contract-sap-liquibase-runner
        environment:
            - MYSQL_DB_HOST=sync-contract-sap-mysql
            - MYSQL_DB_USER=db_user
            - MYSQL_DB_PASS=db_pass
            - MYSQL_DB_PORT=3306
            - MYSQL_DB_NAME=royalty_accounting

    sync-contract-sap-ows-abacus-account:
        platform: linux/amd64
        image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-abacus-account:latest
        depends_on:
            - sync-contract-sap-liquibase-runner
        environment:
            - MYSQL_DB_HOST=sync-contract-sap-mysql
            - MYSQL_DB_USER=db_user
            - MYSQL_DB_PASS=db_pass
            - MYSQL_DB_PORT=3306
            - MYSQL_DB_NAME=royalty_accounting

    sync-contract-sap-ows-abacus-state:
        platform: linux/amd64
        image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-abacus-state:latest
        depends_on:
            - sync-contract-sap-liquibase-runner
        environment:
            - MYSQL_DB_HOST=sync-contract-sap-mysql
            - MYSQL_DB_USER=db_user
            - MYSQL_DB_PASS=db_pass
            - MYSQL_DB_PORT=3306
            - MYSQL_DB_NAME=royalty_accounting
