.PHONY: build unit-test

BIN     = bin
GOBIN   = $(abspath $(BIN))
GOENVS  = GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64
GOFLAGS = -ldflags "-s -w " -v

export DOCKER_BUILDKIT := 1
export GOBIN           := $(GOBIN)
export PATH            := ${GOBIN}:$(PATH)
export SHELL           := /bin/bash

build:
	$(GOENVS) go build $(GOFLAGS) -o bin/authserver ./cmd/auth-server/

generate: generate-entity generate-buf generate-swagger generate-mock

generate-entity: internal/entity/autogenerated_entity.go

generate-buf: $(BIN)/buf
	cd idl/idl && ${GOBIN}/buf generate

internal/entity/autogenerated_entity.go: $(BIN)/goqueryset internal/entity/entity.go
	go generate internal/entity/entity.go

generate-swagger: $(BIN)/swagger
	$(BIN)/swag fmt -d internal/controller/oauth2,internal/dto/oauth2
	$(BIN)/swag init --parseDependency -d api,internal/controller/oauth2,internal/dto/oauth2 -g api.go -o docs/oauth2

$(BIN):
	@mkdir -p $@

$(BIN)/%: $(BIN)
	go install $(PACKAGE)

check: check-golang

check-golang: $(BIN)/golangci-lint generate
	${GOBIN}/golangci-lint run -v --timeout 5m

MOCK_FILES = \
	internal/service/oauth2/oauth2_mock.go

generate-mock: $(MOCK_FILES)

internal/service/oauth2/oauth2_mock.go: internal/service/oauth2/oauth2.go $(BIN)/mockgen
	$(BIN)/mockgen --source=./internal/service/oauth2/oauth2.go -destination=./internal/service/oauth2/oauth2_mock.go -package=oauth2

unit-test: generate
	go test -v ./...

# bufbuild requires go1.18 since v1.1.1.
$(BIN)/buf: PACKAGE=github.com/bufbuild/buf/cmd/buf@v1.1.0
$(BIN)/buf: ${BIN}/protoc-gen-buf-breaking ${BIN}/protoc-gen-buf-lint ${BIN}/protoc-gen-go ${BIN}/protoc-gen-go-grpc ${BIN}/protoc-gen-grpc-gateway ${BIN}/protoc-gen-openapiv2

$(BIN)/protoc-gen-buf-breaking: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@v1.1.0

$(BIN)/protoc-gen-buf-lint: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v1.1.0

$(BIN)/protoc-gen-go: PACKAGE=google.golang.org/protobuf/cmd/protoc-gen-go@v1.28

$(BIN)/protoc-gen-go-grpc: PACKAGE=google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

$(BIN)/protoc-gen-grpc-gateway: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.3

$(BIN)/protoc-gen-openapiv2: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.3

$(BIN)/goqueryset: PACKAGE=github.com/tidbcloud/go-queryset/cmd/goqueryset@master

$(BIN)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46

$(BIN)/swagger: PACKAGE=github.com/swaggo/swag/cmd/swag@v1.16.2

$(BIN)/mockgen: PACKAGE=github.com/golang/mock/mockgen@v1.6.0
