export SHELL
SHELL:=/bin/bash
ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
EMAIL:=user@example.com
INSTANCE_TYPE:=ml.t3.large
BRANCH:=main
AFA_BRANCH:=main
LAMBDAMAP_BRANCH:=main
STACK_NAME:=AfaBootstrapStack
AFA_STACK_NAME:=AfaStack
CDK_TAGS:=--tags Project=Afa

.PHONY: deploy tests default release

default: .venv

# create the virtual environment from which to run each target
.venv: requirements.txt
	python3 -B -m venv $@
	source $@/bin/activate ; pip install -q --use-deprecated=legacy-resolver -r $<

.tox: requirements.txt
	tox -r --notest

tests/reports:
	mkdir -p $@

tox: tests/reports .tox
	tox

tests: .venv
	source $</bin/activate ; \
	pytest -vs tests/

build/:
	mkdir -p $@

build/template.yaml: cdk/app.py cdk/cdk/bootstrap.py build/
	cdk synth -a 'python -B cdk/app.py' ${STACK_NAME} \
		--parameters ${STACK_NAME}:emailAddress=${EMAIL} \
		--parameters ${STACK_NAME}:lambdamapBranch=${LAMBDAMAP_BRANCH} \
		--parameters ${STACK_NAME}:afaBranch=${AFA_BRANCH} > $@

build/afastack.yaml: cdk/app.py
	cdk synth -a 'python3 -B $<' ${AFA_STACK_NAME} \
		--require-approval never \
		--parameters ${AFA_STACK_NAME}:emailAddress=${EMAIL} \
		--parameters ${AFA_STACK_NAME}:instanceType=${INSTANCE_TYPE} \
		--parameters ${AFA_STACK_NAME}:afaBranch=${AFA_BRANCH} \
		--parameters ${AFA_STACK_NAME}:lambdamapBranch=${LAMBDAMAP_BRANCH} > $@

build/build.zip: build/
	zip -r $@ $<

# Deploy the bootstrap stack
deploy: build/template.yaml .venv
	source $(word 2, $^)/bin/activate ; \
	aws cloudformation deploy \
		--template-file $< \
		--capabilities CAPABILITY_NAMED_IAM \
		--stack-name ${BOOTSTRAP_STACK_NAME} \
		--parameter-overrides \
			emailAddress=${EMAIL} \
			instanceType=${INSTANCE_TYPE} \
		${CDK_TAGS}

deploy-cdk:
	cdk deploy -a 'python -B cdk/app.py' ${STACK_NAME} \
		--parameters ${STACK_NAME}:emailAddress=${EMAIL} \
		--parameters ${STACK_NAME}:lambdamapBranch=${LAMBDAMAP_BRANCH} \
		--parameters ${STACK_NAME}:afaBranch=${AFA_BRANCH}

# deploy AfaStack
deploy-ui: cdk/app.py
	cdk deploy -a 'python3 -B $<' ${AFA_STACK_NAME} \
		--require-approval never \
		--parameters ${AFA_STACK_NAME}:emailAddress=${EMAIL} \
		--parameters ${AFA_STACK_NAME}:instanceType=${INSTANCE_TYPE} \
		--parameters ${AFA_STACK_NAME}:afaBranch=${AFA_BRANCH} \
		--parameters ${AFA_STACK_NAME}:lambdamapBranch=${LAMBDAMAP_BRANCH} \
		${CDK_TAGS}

cfn-nag: build/template.yaml
	cfn_nag_scan --input-path $<