PACKAGES = `go list ./... | grep -v /vendor/`

.PHONY: dev-affiliate-worker dev-api dev-quests dev-sourcer dev-worker \
	lint \
	mocks \
	setup setup-db setup-linter setup-migrate setup-psql \
	test \
	update

build-validator-task:
	rm ./validator/task/task
	GOOS=linux go build -o ./validator/task/task ./validator/task/
	cp ./config/staging.yaml ./validator/task/config.yaml
	cp ./.ebextensions/global/data/sandstorm-agent/templates.d/secrets.yaml ./validator/task/secrets.yaml
	rm ./validator/cli/validator
	go build -o ./validator/cli/validator ./validator/cli/

dev-affiliate-worker:
	go run cmd/affiliateworker/main.go

dev-api:
	go run cmd/api/main.go

dev-quests:
	go run cmd/quests/main.go

dev-sourcer:
	go run cmd/sourcer/main.go

dev-worker:
	go run cmd/worker/main.go

lint:
	golangci-lint run

mocks:
	mockery --all --dir=internal/clients --case=underscore --output=internal/mocks
	mockery --all --dir=internal/affiliateinviter/ --case=underscore --output=internal/mocks
	mockery --all --dir=internal/notifications/ --case=underscore --output=internal/mocks

setup: setup-linter setup-mocks setup-migrate setup-psql setup-db

setup-db:
	# Create "achievements" database (PostgresQL) & migrate schema
	createdb achievements
	migrate -path _migrations/db -database 'postgres://localhost:5432/achievements?sslmode=disable' up

setup-linter:
	brew install golangci/tap/golangci-lint

setup-mocks:
	brew install vektra/tap/mockery
	brew upgrade mockery

setup-migrate:
	# Install migrate CLI for PostgresQL
	go get -u -d github.com/mattes/migrate/cli github.com/lib/pq
	go build -tags 'postgres' -o /usr/local/bin/migrate github.com/mattes/migrate/cli

setup-psql:
	# Install PostgresQL via Homebrew
	brew list postgresql &>/dev/null || brew install postgresql

setup-jenkins:
	@wget -O - -q https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.31.0

test:
	go test -cover -race -v $(PACKAGES)

update:
	dep ensure

TWITCH_CB_AWS = 989470033077

create_achievements_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_achievements_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_achievements_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_achievements_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

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
