BINARY   := vecna
CMD      := ./cmd/vecna
BUILD_DIR := ./bin

BUMP     ?= patch
TEST_URL ?=
TEST_MODEL ?=

.PHONY: all build test lint fmt tidy clean release-version test-integration

all: tidy fmt lint test build

build:
	mkdir -p $(BUILD_DIR)
	go build -o $(BUILD_DIR)/$(BINARY) $(CMD)

test:
	go test ./...

lint:
	golangci-lint run ./...

fmt:
	golangci-lint run --fix ./...
	gofmt -w .

tidy:
	go mod tidy

clean:
	rm -rf $(BUILD_DIR)

# Run dimension integration tests against a live embedding server.
# Requires VECNA_TEST_URL and VECNA_TEST_MODEL to be set.
#
# Examples:
#   make test-integration TEST_URL=http://localhost:11434 TEST_MODEL=nomic-embed-text
#   make test-integration TEST_URL=http://localhost:11434 TEST_MODEL=nomic-embed-text VECNA_TEST_TARGET_DIM=256
#
test-integration:
	@if [ -z "$(TEST_URL)" ]; then echo "ERROR: TEST_URL is required"; exit 1; fi
	@if [ -z "$(TEST_MODEL)" ]; then echo "ERROR: TEST_MODEL is required"; exit 1; fi
	VECNA_TEST_URL=$(TEST_URL) \
	VECNA_TEST_MODEL=$(TEST_MODEL) \
	VECNA_TEST_API_TYPE=$(or $(TEST_API_TYPE),openai) \
	VECNA_TEST_API_KEY=$(TEST_API_KEY) \
	go test -v -tags integration -timeout 120s ./tests/integration/

release-version:
	@current=$$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0"); \
	major=$$(echo $$current | sed 's/^v//' | cut -d. -f1); \
	minor=$$(echo $$current | sed 's/^v//' | cut -d. -f2); \
	patch=$$(echo $$current | sed 's/^v//' | cut -d. -f3); \
	case "$(BUMP)" in \
	  major) major=$$((major+1)); minor=0; patch=0 ;; \
	  minor) minor=$$((minor+1)); patch=0 ;; \
	  patch) patch=$$((patch+1)) ;; \
	  *) echo "Unknown BUMP value '$(BUMP)'. Use: patch (default), minor, major"; exit 1 ;; \
	esac; \
	next="v$${major}.$${minor}.$${patch}"; \
	echo "Tagging $$current → $$next"; \
	git tag -a "$$next" -m "Release $$next"; \
	git push origin "$$next"
