help: ## show this help
	@echo 'usage: make [target] ...'
	@echo ''
	@echo 'targets:'
	@egrep '^(.+)\:\ .*##\ (.+)' ${MAKEFILE_LIST} | sed 's/:.*##/#/' | column -t -c 2 -s '#'

install: ## install all go dependencies
	go get \
		github.com/bufbuild/buf/cmd/buf \
		github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
		github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
		google.golang.org/grpc/cmd/protoc-gen-go-grpc \
		google.golang.org/protobuf/cmd/protoc-gen-go 
		
generate: ## generate grpc proto for golang
	buf generate
	oapi-codegen --config ./api/openapi/v1/api.yaml  ./api/openapi/v1/openapi.yaml
	oapi-codegen --config ./api/openapi/v1/models.yaml ./api/openapi/v1/openapi.yaml

test: ## run all layers tests
	@make test.unit
	@make test.integration

test.unit: ## run unit tests
	go test ./...

test.integration: ## run integration tests
	go mod vendor
	@make test.integration.up
	@make test.integration.start
	@make test.integration.down

test.integration.up: ## build integration test environment
	docker-compose -f deployments/test/docker-compose.yaml up -d --remove-orphans
	
test.integration.down: ## shutting down integration environment
	docker-compose -f deployments/test/docker-compose.yaml down --volumes

test.integration.start: ## run integration test
	docker-compose -p integration -f deployments/test/docker-compose.integration.yaml down 
	docker-compose -p integration -f deployments/test/docker-compose.integration.yaml up --exit-code-from integration --remove-orphans
	docker-compose -p integration -f deployments/test/docker-compose.integration.yaml down 

test.e2e.start: ## run integration test
	go test ./tests/e2e/...

run: ## run app
	go run ./cmd/app/main.go

dev.up: ## run dev environment
	docker-compose -f deployments/dev/docker-compose.yaml up -d

dev.down: ## shutting down dev environment
	docker-compose -f deployments/dev/docker-compose.yaml down --volumes --rmi local
