.PHONY: build run test integration-test vet tidy fmt up down logs clean fraud-test fraud-install proto

build:
	go build -o bin/api ./cmd/api

run:
	go run ./cmd/api

test:
	go test ./... -race -count=1

# Integration tests spin up real Postgres + NATS via testcontainers and an
# in-process gRPC stub for the fraud engine. Requires Docker.
integration-test:
	go test -tags=integration -count=1 -timeout=5m ./test/integration/...

vet:
	go vet ./...

tidy:
	go mod tidy

fmt:
	gofmt -s -w .

up:
	docker compose up --build -d

down:
	docker compose down

logs:
	docker compose logs -f api fraud-engine nats

fraud-install:
	cd fraud-engine && python3 -m venv .venv && . .venv/bin/activate && pip install -e ".[dev]"

fraud-test:
	cd fraud-engine && . .venv/bin/activate && python -m pytest -v

# Regenerates Go + Python stubs from proto/fraud/v1/fraud.proto.
# Requires fraud-engine venv (provides bundled protoc via grpcio-tools)
# and the Go plugins (protoc-gen-go, protoc-gen-go-grpc) on $(go env GOPATH)/bin.
proto:
	@command -v protoc-gen-go >/dev/null || go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.2
	@command -v protoc-gen-go-grpc >/dev/null || go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1
	cd fraud-engine && . .venv/bin/activate && \
	  PATH="$$(go env GOPATH)/bin:$$PATH" python -m grpc_tools.protoc -I ../proto \
	    --go_out=.. --go_opt=module=github.com/alchemistkay/guestguard \
	    --go-grpc_out=.. --go-grpc_opt=module=github.com/alchemistkay/guestguard \
	    --python_out=. --pyi_out=. --grpc_python_out=. \
	    ../proto/fraud/v1/fraud.proto

clean:
	rm -rf bin fraud-engine/.venv
