GO_BUILD_DIR = ./build/server/server
GO_MAIN_FILE = ./cmd/server/

WORKER_BUILD_DIR = ./build/server/worker
WORKER_MAIN_FILE = ./cmd/worker/
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))

build:
	GO111MODULE=on CGO_ENABLED=0 go build -o ${GO_BUILD_DIR} ${GO_MAIN_FILE}
	GO111MODULE=on CGO_ENABLED=0 go build -o ${WORKER_BUILD_DIR} ${WORKER_MAIN_FILE}

.PHONY: devtools
devtools:  ## Install dev tools
	@echo "==> Installing dev tools..."
	go install golang.org/x/tools/cmd/goimports@latest
	curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin $(GOLANGCI_VERSION)

.PHONY: fmt
fmt: ## Format changed go
	@scripts/fmt.sh
	go mod tidy
	go install github.com/swaggo/swag/cmd/swag@v1.16.3
	swag fmt --exclude ./api/v1/connect2

.PHONY: fix-lint
fix-lint: ## Fix linting errors
	golangci-lint run --fix

wire:
	go install github.com/google/wire/cmd/wire@latest
	wire ./...

test:
	go test -v ./...

generate-swagger:
	go install github.com/swaggo/swag/cmd/swag@v1.16.3
	swag init -g controller.go -d api/v1/vercel -o docs/vercel --instanceName vercel
	swag init -g controller.go -d api/v1/connect -o docs/connect --instanceName connect
	swag init -g controller.go -d api/v1/git -o docs/git --instanceName git
	swag init -g controller.go -d api/v1/pingchat -o docs/pingchat --instanceName pingchat

generate-migrate-sql:
	go build -o ./build/migrate/tool ./cmd/migrate/*.go
	./build/migrate/tool

clean:
	rm -rf ./bin
	rm -rf ./coverage

serve-local: generate-swagger wire
	go build -tags local -o ${GO_BUILD_DIR} ${GO_MAIN_FILE}
	go build -tags local -o ${WORKER_BUILD_DIR} ${WORKER_MAIN_FILE}
	./scripts/run_local.sh ${ARGS}

.PHONY: build lint test clean wire
