LOCAL_BIN := $(CURDIR)/bin
PATH := $(LOCAL_BIN):$(PATH)

ifeq (local-migrations-create,$(firstword $(MAKECMDGOALS)))
  migrationName := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  $(eval $(migrationName):;@:)
endif

local-migrate-up:
	@goose -allow-missing -dir ./migrations postgres "user=crab password=crab dbname=smm-core host=localhost port=5432 sslmode=disable" up

local-migrations-create:
	@goose -dir ./migrations postgres "user=crab dbname=smm-core host=localhost port=5432 sslmode=disable" create "${migrationName}" sql

local-up:
	docker-compose -f docker-compose-local.yml up -d --force-recreate --build

local-down:
	docker-compose -f docker-compose-local.yml down

local-wait_db:
	timeout 10s bash -c "until docker exec db pg_isready; do sleep 1; done"

local-restart: local-down local-up local-wait_db local-migrate-up

local-go-init: export GOBIN := $(LOCAL_BIN)
local-go-init:
	go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
	go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
	go get google.golang.org/protobuf/cmd/protoc-gen-go
	go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
	go install \
		github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
		github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
		google.golang.org/protobuf/cmd/protoc-gen-go \
		google.golang.org/grpc/cmd/protoc-gen-go-grpc
	go install github.com/pressly/goose/v3/cmd/goose@latest

generate:
	rm -rf proto resources
	mkdir -p proto resources
	protoc \
	  -I ./api \
	  -I ./third_party \
      --go_out ./proto --go_opt paths=source_relative \
      --go-grpc_out ./proto --go-grpc_opt paths=source_relative \
      --grpc-gateway_out ./proto --grpc-gateway_opt paths=source_relative \
      --openapiv2_out=./resources \
      ./api/smm_core.proto

run:
	go run ./cmd/smm_core/main.go