.PHONY: dev_api dev_worker lint mocks test test_integration update

AWS_PROFILE ?= twitch-cb-aws
AWS_REGION ?= us-west-2
ECC_PUBLIC_KEY_PATH ?= internal/authorization/development_ecc_public.key
LIVELINE_HOST ?= vpce-0815a64c0a4360988-phdsmn53.vpce-svc-0e4e8f90d47bca00d.us-west-2.vpce.amazonaws.com
REDIS_HOST ?= localhost
REDIS_PORT ?= 6379
S3_ASSETS_BUCKET ?= cb-roster-staging-assets
S3_UPLOADS_BUCKET ?= twitch-team-asset-upload-staging
USERS_SERVICE_HOST ?= https://dev.users-service.twitch.a2z.com
EPOCH = $(shell date +"%s")
PDMS_CALLER_ROLE_ARN ?= "arn:aws:iam::895799599216:role/PDMSLambda-CallerRole-18451FI19HSXT"
PDMS_LAMBDA_ARN ?= "arn:aws:lambda:us-west-2:895799599216:function:PDMSLambda-LambdaFunction-IT8I1PE1YR81:live"
ROSTER_EVENTBUS_SQS_URL ?= "https://sqs.us-west-2.amazonaws.com/989470033077/roster-staging-eventbus-worker-queue"

dev_api:
	# Run main.go in development
	AWS_PROFILE=$(AWS_PROFILE) \
	AWS_REGION=$(AWS_REGION) \
	ECC_PUBLIC_KEY_PATH=$(ECC_PUBLIC_KEY_PATH) \
	ENVIRONMENT=development \
	LIVELINE_HOST=$(LIVELINE_HOST) \
	REDIS_HOST=$(REDIS_HOST) \
	REDIS_PORT=$(REDIS_PORT) \
	S3_ASSETS_BUCKET=$(S3_ASSETS_BUCKET) \
	S3_ATTACHMENTS_BUCKET=$(S3_ATTACHMENTS_BUCKET) \
	S3_UPLOADS_BUCKET=$(S3_UPLOADS_BUCKET) \
	USERS_SERVICE_HOST=$(USERS_SERVICE_HOST) \
	go run cmd/api/main.go

dev_worker:
	# Run main.go in development
	AWS_PROFILE=$(AWS_PROFILE) \
	AWS_REGION=$(AWS_REGION) \
	ECC_PUBLIC_KEY_PATH=$(ECC_PUBLIC_KEY_PATH) \
	ENVIRONMENT=development \
	LIVELINE_HOST=$(LIVELINE_HOST) \
	REDIS_HOST=$(REDIS_HOST) \
	REDIS_PORT=$(REDIS_PORT) \
	S3_ASSETS_BUCKET=$(S3_ASSETS_BUCKET) \
	S3_ATTACHMENTS_BUCKET=$(S3_ATTACHMENTS_BUCKET) \
	S3_UPLOADS_BUCKET=$(S3_UPLOADS_BUCKET) \
	USERS_SERVICE_HOST=$(USERS_SERVICE_HOST) \
	PDMS_CALLER_ROLE_ARN=$(PDMS_CALLER_ROLE_ARN) \
	PDMS_LAMBDA_ARN=$(PDMS_LAMBDA_ARN) \
	ROSTER_EVENTBUS_SQS_URL=$(ROSTER_EVENTBUS_SQS_URL) \
	go run cmd/worker/main.go

lint:
	# Lint with Go Meta Linter using configuration from .gometalinter.json
	gometalinter ./...

mocks:
	# Generate mocks for interfaces used in internal/
	mockery --dir=internal/api/ --all --case=underscore --output=internal/api/mocks/
	mockery --dir=internal/liveline/ --all --case=underscore --output=internal/api/mocks
	mockery --dir=internal/s3/ --name=Service --case=underscore --output=internal/s3/mocks/
	mockery --dir=internal/s3/uploader/ --name=Service --case=underscore --output=internal/s3/uploader/mocks/
	mockery --dir=internal/db/ --all --case=underscore --output=internal/db/mocks/
	mockery --dir=internal/clients/pushy/ --all --case=underscore --output=internal/api/mocks/
	mockery --dir=internal/eventbus --all --case=underscore --output=internal/eventbus/mocks/

test:
	# Test packages excluding vendor
	go test -cover -race -v ./...

test_integration:
	# Test packages including integration only specs (excluding vendor)
	go test -cover -race -v ./... -tags=integration

update:
	dep ensure

TWITCH_CB_AWS = 989470033077

create_roster_rds_snapshot_src_production:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation create-stack --template-body file://cloudformation/database/rds_snapshot_src.yaml --cli-input-json file://cloudformation/database/create_rds_snapshot_src_production.json

update_roster_rds_snapshot_src_production:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation update-stack --template-body file://cloudformation/database/rds_snapshot_src.yaml --cli-input-json file://cloudformation/database/update_rds_snapshot_src_production.json

create_roster_rds_snapshot_dest_production:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation create-stack --template-body file://cloudformation/database/rds_snapshot_dest.yaml --cli-input-json file://cloudformation/database/create_rds_snapshot_dest_production.json

update_roster_rds_snapshot_dest_production:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation update-stack --template-body file://cloudformation/database/rds_snapshot_dest.yaml --cli-input-json file://cloudformation/database/update_rds_snapshot_dest_production.json

create_pagerduty:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation create-stack --template-body file://cloudformation/pagerduty/pagerduty.yaml --cli-input-json file://cloudformation/pagerduty/create_pagerduty.json

update_pagerduty:
	python scripts/validate_aws.py ${TWITCH_CB_AWS}
	aws cloudformation create-change-set --template-body file://cloudformation/pagerduty/pagerduty.yaml --cli-input-json file://cloudformation/pagerduty/update_pagerduty.json --change-set-name latest-${EPOCH}
	@echo "Apply updates at https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks?tab=changesets"

validate_template:
	aws cloudformation validate-template --template-body file://cloudformation/database/rds_snapshot_src.yaml
	aws cloudformation validate-template --template-body file://cloudformation/database/rds_snapshot_dest.yaml
	aws cloudformation validate-template --template-body file://cloudformation/pagerduty/pagerduty.yaml
