.PHONY: proto-js .FORCE
SHELL = /bin/bash -o pipefail

PROTODIR=perxis-proto/proto
DSTDIR=config/dist


ALLPROTO?=$(shell find $(PROTODIR) -name '*.proto' )
PROTOFILES=	$(filter-out proto/status/status.proto, $(ALLPROTO))
PROTOTSFILES=$(ALLPROTO:.proto=.ts)

PROTOC_MAJOR_VERSION=$(shell protoc --version | awk '{print $$2;}' | cut -d. -f1)
PROTOC_MINOR_VERSION=$(shell protoc --version | awk '{print $$2;}' | cut -d. -f2)
TSC_MAJOR_VERSION=$(shell tsc --version | awk '{print $$2;}' | cut -d. -f1)
TSC_MINOR_VERSION=$(shell tsc --version | awk '{print $$2;}' | cut -d. -f2)
TSC_MIC_VERSION=$(shell tsc --version | awk '{print $$2;}' | cut -d. -f3)
$(shell mkdir $(DSTDIR))

# Генерация
js-client: protoc-check js-check $(PROTOTSFILES) generate-js
	@echo "Generated all files for npm package"

%.ts: %.proto
	@protoc -I=$(PROTODIR) \
	--plugin=@protoc-gen-ts_proto \
 	--ts_proto_opt=env=browser,outputServices=generic-definitions,outputJsonMethods=false,esModuleInterop=true,useOptionals=messages,exportCommonSymbols=false,useDate=false,useExactTypes=false \
 	--ts_proto_out=$(DSTDIR) \
 	"$<"


generate-js:
	@./config/generate.sh

proto-clean:
	@rm -rf $(DSTDIR)

.FORCE:
# Проверка, что установлены необходимые инструменты для генерации proto-файлов
protoc-check:
ifeq (,$(shell which protoc))
	$(error "Protocol Buffers not found. Run for linux: \"sudo apt install -y protobuf-compiler\", for mac: \"brew install protobuf\" \
	or visit \"https://grpc.io/docs/protoc-installation/\" for more.\n")
endif
ifneq ($(shell expr $(PROTOC_MAJOR_VERSION) \>= 3),1)
	 $(error "Current version is outdated. Please update protoc")
endif
ifneq ($(shell expr $(PROTOC_MINOR_VERSION) \>= 21), 1)
	 $(error "Current version is lower than 3.21. Please update protoc")
endif

js-check:
ifeq (,$(shell which npm))
	$(error "NPM not found. Run for linux: \"sudo apt install npm\", for mac: \"brew install npm\" \
	or visit \"https://docs.npmjs.com/getting-started\" for more.\n")
endif
ifeq (,$(shell which protoc-gen-ts_proto))
	$(error "Ts-proto plugin for protoc not found. \
	Run \"npm install -g ts-proto@1.158.0\" \
	or visit \"https://github.com/stephenh/ts-proto\" for more.\n")
endif
ifeq (,$(shell which tsc))
	$(error "Typescript not found. \
	Run \"npm install -g typescript@5.1.6\" \
	or visit \"https://github.com/microsoft/TypeScript\" for more.\n")
endif
ifneq ($(shell expr $(TSC_MAJOR_VERSION) \>= 5), 1)
  	 $(error "Current version is outdated. Please update typescript \n")
endif
ifneq ($(shell expr $(TSC_MINOR_VERSION) \>= 1), 1)
  	 $(error "Current version is lower than 5.1 Please update typescript \n")
endif
ifneq ($(shell expr $(TSC_MIC_VERSION) \>= 6), 1)
  	 $(error "Current version is lower than 5.1.6 Please update typescript \n")
endif