.PHONY: all bootstrap setup check test lint fmt fmt-check build clean deps test-coverage test-integration local install release release-snapshot docker hooks

# Version number
VERSION := 1.0.0-rc.1

# Build variables
GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown")
GIT_COMMIT_DATE := $(shell git show -s --format=%cs HEAD 2>/dev/null || echo "unknown")

# Linker flags
LDFLAGS := -X 'sneak.berlin/go/vaultik/internal/globals.Version=$(VERSION)' \
           -X 'sneak.berlin/go/vaultik/internal/globals.Commit=$(GIT_REVISION)' \
           -X 'sneak.berlin/go/vaultik/internal/globals.CommitDate=$(GIT_COMMIT_DATE)'

# Default target
all: vaultik

# Install all development dependencies.
bootstrap:
	@script/bootstrap

# Prepare a fresh clone: bootstrap plus pre-commit hook.
setup:
	@script/setup

# Combined pre-commit/CI gate: tests, lint, format check.
check:
	@script/check

# Run tests only.
test:
	@script/test

# Check if code is formatted (read-only).
fmt-check:
	@script/fmt-check

# Format code.
fmt:
	@script/fmt

# Run linter only.
lint:
	@script/lint

# Build binary.
vaultik: internal/*/*.go cmd/vaultik/*.go
	go build -ldflags "$(LDFLAGS)" -o $@ ./cmd/vaultik

# Clean build artifacts.
clean:
	rm -f vaultik
	go clean

# Install dependencies.
deps:
	go mod download
	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

# Run tests with coverage.
test-coverage:
	go test -v -coverprofile=coverage.out ./...
	go tool cover -html=coverage.out -o coverage.html

# Run integration tests.
test-integration:
	go test -v -tags=integration ./...

local:
	VAULTIK_CONFIG=$(HOME)/etc/vaultik/config.yml ./vaultik snapshot --debug list 2>&1
	VAULTIK_CONFIG=$(HOME)/etc/vaultik/config.yml ./vaultik snapshot --debug create 2>&1

install: vaultik
	cp ./vaultik $(HOME)/bin/

# Build and publish release artifacts (linux/darwin × amd64/arm64) via goreleaser.
release:
	goreleaser release --clean

# Dry-run a release build without publishing or tagging.
release-snapshot:
	goreleaser release --clean --snapshot

# Build Docker image.
docker:
	@script/docker

# Install pre-commit hook.
hooks:
	@script/install-precommit
