.PHONY: build test test-db lint generate generate-check dev migrate seed export clean tidy

BINARY := oikos
GO ?= go

build:
	$(GO) build -o $(BINARY) -tags timetzdata ./cmd/oikos

test:
	$(GO) test -race -cover ./...

# Integration tests against the compose Postgres (starts it if needed)
test-db:
	docker compose up -d postgres
	@sleep 3
	OIKOS_TEST_DATABASE_URL="postgres://oikos:$${OIKOS_DB_PASSWORD:-oikos_dev}@localhost:5432/oikos?sslmode=disable" \
		$(GO) test -race -count=1 ./internal/db/ ./internal/httpapi/ ./internal/mcp/

lint:
	$(GO) vet ./...
	@command -v golangci-lint >/dev/null 2>&1 && golangci-lint run || echo "golangci-lint not installed, skipping"

generate:
	$(GO) run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@v2.4.1 \
		-config api/codegen.yaml api/openapi.yaml
	$(GO) run github.com/sqlc-dev/sqlc/cmd/sqlc@v1.29.0 generate

# CI drift guard: regenerate and fail if the committed output changed.
generate-check: generate
	@git diff --exit-code -- internal/httpapi/gen internal/db/sqlcgen \
		|| (echo "generated code is stale — run 'make generate' and commit" && exit 1)

migrate:
	$(GO) run ./cmd/oikos migrate

seed:
	$(GO) run ./cmd/oikos seed

export:
	$(GO) run ./cmd/oikos export

dev:
	docker compose --profile dev up -d

clean:
	rm -f $(BINARY)
	$(GO) clean -testcache

tidy:
	$(GO) mod tidy
