ROOT := $(shell pwd)
OUTPUT := $(ROOT)/output
OUTPUT_BIN := $(OUTPUT)/bin

# These environment variables must be set for deployment to work.
AWS_PROFILE := $(AWS_PROFILE)

# Common values used throughout the Makefile, not intended to be configured.
AWS_REGION = us-west-1
GO_MODULE := github.com/tidbcloud/jiraport

GOHOSTOS ?= $(shell go env GOHOSTOS)
DOCKER_HOST := 
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS), darwin))
	DOCKER_HOST := unix:///Users/$(shell whoami)/.docker/run/docker.sock
endif

.PHONY: install
install: install-lint install-mockgen

.PHONY: install-lint
install-lint:
	GOBIN=$(OUTPUT_BIN) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.5

.PHONY: install-mockgen
install-mockgen:
	GOBIN=$(OUTPUT_BIN) go install github.com/golang/mock/mockgen@v1.6.0

.PHONY: lint
lint: LINTER ?= $(OUTPUT_BIN)/golangci-lint
lint: install generate
	go mod tidy && git diff --exit-code
	$(LINTER) run ./...
	sam validate --region=$(AWS_REGION) --lint

.PHONY: test
test:
	go test -v -race -cover ./...

.PHONY: build
build: generate build-jirport-api build-jirport-resolver

.PHONY: build-jirport-api
build-jirport-api: OUTPUT_DIR ?= ./bin/jiraport-api
build-jirport-api: BUILD_NAME ?= bootstrap
build-jirport-api: BUILD_DIR ?= ./cmd/api
build-jirport-api: 
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(OUTPUT_DIR)/$(BUILD_NAME) $(BUILD_DIR)

.PHONY: build-jirport-resolver
build-jirport-resolver: OUTPUT_DIR ?= ./bin/jiraport-resolver
build-jirport-resolver: BUILD_NAME ?= bootstrap
build-jirport-resolver: BUILD_DIR ?= ./cmd/resolver
build-jirport-resolver: 
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(OUTPUT_DIR)/$(BUILD_NAME) $(BUILD_DIR)

.PHONY: build-jirport-scheduler
build-jirport-scheduler: OUTPUT_DIR ?= ./bin/jiraport-scheduler
build-jirport-scheduler: BUILD_NAME ?= bootstrap
build-jirport-scheduler: BUILD_DIR ?= ./cmd/scheduler
build-jirport-scheduler:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(OUTPUT_DIR)/$(BUILD_NAME) $(BUILD_DIR)

run-api: build-jirport-api
	cp config/local/* bin/jiraport-api
	DOCKER_HOST=$(DOCKER_HOST) AWS_PROFILE=$(AWS_PROFILE) sam local start-api --region=$(AWS_REGION)

run-resolver: build-jirport-resolver
	cp config/local/* bin/jiraport-resolver
	DOCKER_HOST=$(DOCKER_HOST) AWS_PROFILE=$(AWS_PROFILE) sam local start-lambda --region=$(AWS_REGION)

.PHONY: generate
generate: install-mockgen
generate: GEN_DIR ?= ./...
generate:
	GOBIN=$(OUTPUT_BIN) GO_MODULE=$(GO_MODULE) go generate $(GEN_DIR)