PROJECTS := apollo delphi marketing infrastructure
APOLLO_ENVS 				:= dev qa stage uat prod
DELPHI_ENVS 				:= dev qa stage prod
MARKETING_ENVS 			:= dev qa stage uat
INFRASTRUCTURE_ENVS := dev prod

.PHONY: all
all: $(PROJECTS)

.PHONY: apollo
apollo:
	for env_name in $(APOLLO_ENVS); do \
		for state_name in "Main" "deploy"; do \
			cd apollo/$$env_name/$$state_name && \
			terraform init && \
			terraform get --update && \
			terraform validate && \
			terraform plan -out plan.tfplan && \
			cd -; \
		done \
	done

.PHONY: delphi
delphi:
	for env_name in $(DELPHI_ENVS); do \
		for state_name in "Main" "deploy"; do \
			cd delphi/$$env_name/$$state_name && \
			terraform init && \
			terraform get --update && \
			terraform validate && \
			terraform plan -out plan.tfplan && \
			cd -; \
		done \
	done

.PHONY: marketing
marketing:
	for env_name in $(MARKETING_ENVS); do \
		for state_name in "Main" "deploy"; do \
			cd marketing/$$env_name/$$state_name && \
			terraform init && \
			terraform get --update && \
			terraform validate && \
			terraform plan -out plan.tfplan && \
			cd -; \
		done \
	done

.PHONY: infrastructure
infrastructure:
	for env_name in $(INFRASTRUCTURE_ENVS); do \
		cd infrastructure/$$env_name && \
		terraform init && \
		terraform get --update && \
		terraform validate && \
		terraform plan -out plan.tfplan && \
		cd -; \
	done

.PHONY: clean
clean:
		for env_name in $(APOLLO_ENVS); do \
  		for state_name in "Main" "deploy"; do \
  			rm apollo/$$env_name/$$state_name/plan.tfplan; \
  		done \
  	done; \
  	for env_name in $(DELPHI_ENVS); do \
			for state_name in "Main" "deploy"; do \
				rm delphi/$$env_name/$$state_name/plan.tfplan; \
			done \
		done; \
		for env_name in $(MARKETING_ENVS); do \
			for state_name in "Main" "deploy"; do \
				rm marketing/$$env_name/$$state_name/plan.tfplan; \
			done \
		done; \
		for env_name in $(INFRASTRUCTURE_ENVS); do \
			rm infrastructure/$$env_name/plan.tfplan; \
		done;
