BUILD_NUMBER?=1
PROJECT?="auth0-deploy"
REPOSITORY?="apollo/${PROJECT}"
TAG?=develop
ECR?="475275892927.dkr.ecr.us-east-1.amazonaws.com/${REPOSITORY}"
DRY_RUN?=1
AUTH0_ALLOW_DELETE?=0

# Error messages
ERR_MSG_WORKING_DIR= Its a subdir of ./conf, for example WORKING_DIR=tenant-temp
ERR_MSG_ENV_FILE=It should look like name of tenant, for example ENV_FILE=sme-dna
ERR_MSG_FILES=List of files like -f='/rules/MFA.js' -f='/rules/MFA.json' -f='/roles/' etc.

# Check that given variables are set and all have non-empty values,
# die with an error otherwise.
#
# Params:
#   1. Variable name(s) to test.
#   2. (optional) Error message to print.
check_defined = \
    $(strip $(foreach 1,$1, \
        $(call __check_defined,$1,$(strip $(value 2)))))
__check_defined = \
    $(if $(value $1),, \
        $(error Undefined $1$(if $2, ($2))))

.PHONY:docker/build
docker/build:
	# @docker build -t ${REPOSITORY}:${TAG}-${BUILD_NUMBER}-deploy_tool -f modules/deploy_tool/Dockerfile modules/deploy_tool/
	# @docker build -t ${REPOSITORY}:${TAG}-${BUILD_NUMBER}-user_manager -f modules/user_manager/Dockerfile modules/user_manager/
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml build

.PHONY:auth0/dump
auth0/dump:
	$(call check_defined, ENV_FILE, ${ERR_MSG_ENV_FILE})
	$(call check_defined, WORKING_DIR, ${ERR_MSG_WORKING_DIR})
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run tool node index.js custom-dump -w=$(WORKING_DIR) -r=$(DRY_RUN)

.PHONY:auth0/dump-users
auth0/dump-users:
	$(call check_defined, ENV_FILE, ${ERR_MSG_ENV_FILE})
	$(call check_defined, WORKING_DIR, ${ERR_MSG_WORKING_DIR})
	docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run user_manager mkdir -p /app/conf/$(WORKING_DIR)
	docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run user_manager python index.py --dump_users gzip /app/conf/$(WORKING_DIR)/users.gz

.PHONY:auth0/deploy
auth0/deploy:
	$(call check_defined, ENV_FILE, ${ERR_MSG_ENV_FILE})
	$(call check_defined, WORKING_DIR, ${ERR_MSG_WORKING_DIR})
	$(call check_defined, FILES, ${ERR_MSG_FILES})
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run tool node index.js custom-deploy $(FILES) -w=$(WORKING_DIR) -r=$(DRY_RUN) -x=$(AUTH0_ALLOW_DELETE)

# Cleanup /packages dir
.PHONY:auth0/cleanup
auth0/cleanup:
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run tool node index.js custom-cleanup

.PHONY:auth0/status
auth0/status:
	$(call check_defined, ENV_FILE, ${ERR_MSG_ENV_FILE})
	$(info This is your working auth0 environment:)
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml config
	@IMAGE_WITH_TAG=${REPOSITORY}:${TAG}-${BUILD_NUMBER} docker-compose -f docker-compose.yml -f docker-compose.${ENV_FILE}.yml run tool node index.js custom-status -w=$(WORKING_DIR) -r=$(DRY_RUN)

.PHONY:docker/login
docker/login:
	@aws ecr get-login --no-include-email | awk '{print $$6}' | docker login -u AWS --password-stdin https://${ECR}

.PHONY:docker/push
docker/push: docker/login
	@docker push ${ECR}/${REPOSITORY}:${TAG}
