.PHONY: test test-cover test-agent lint build install clean help

VERSION ?= dev-$(shell git describe --tags --always --dirty 2>/dev/null || echo unknown)
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || echo unknown)

test:
	go test ./... -v -race

test-cover:
	@mkdir -p build
	go test ./... -coverprofile=build/coverage.out
	go tool cover -html=build/coverage.out -o build/coverage.html
	@echo "✅ Coverage report: open build/coverage.html in your browser"

test-agent:
	go test -run TestAgent ./... -v

lint:
	@which golangci-lint > /dev/null || (echo "❌ golangci-lint not found. Install with:" && echo "  go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest" && exit 1)
	golangci-lint run

build:
	@mkdir -p build
	go build -trimpath -ldflags "-s -w -X 'gmgauthier.com/grokkit/internal/version.Version=$(VERSION)' -X 'gmgauthier.com/grokkit/internal/version.Commit=$(COMMIT)' -X 'gmgauthier.com/grokkit/internal/version.BuildDate=$(DATE)'" -o build/grokkit .
	@echo "✅ Dev build: VERSION=$(VERSION) COMMIT=$(COMMIT) DATE=$(DATE)"

install: build
	mkdir -p ~/.local/bin
	cp build/grokkit ~/.local/bin/grokkit
	chmod +x ~/.local/bin/grokkit
	@echo "✅ grokkit installed to ~/.local/bin"

clean:
	rm -rf build/

help:
	@echo "Available targets:"
	@echo "  test         Run all tests"
	@echo "  test-cover   Run tests + generate HTML coverage report"
	@echo "  test-agent   Run only agent tests"
	@echo "  lint         Run golangci-lint (matches CI pipeline)"
	@echo "  build        Build optimized binary"
	@echo "  install      Build and install to ~/.local/bin"
	@echo "  clean        Remove build artifacts"