.PHONY: build run test clean docker-build docker-run

# Build the blockchain binary
build:
	go build -o bin/blockchain cmd/blockchain/main.go

# Run the blockchain node
run: build
	./bin/blockchain

# Run tests
test:
	go test -v ./...

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

# Clean build artifacts
clean:
	rm -rf bin/
	rm -rf data/
	rm -f coverage.out coverage.html

# Build Docker image
docker-build:
	docker build -t blockchain-network .

# Run with Docker Compose
docker-up:
	docker-compose up -d

# Stop Docker services
docker-down:
	docker-compose down

# View Docker logs
docker-logs:
	docker-compose logs -f

# Format code
fmt:
	go fmt ./...

# Run linter
lint:
	golangci-lint run

# Download dependencies
deps:
	go mod download
	go mod tidy

# Install development tools
install-tools:
	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

# Run benchmarks
bench:
	go test -bench=. -benchmem ./...

# Create data directories
init:
	mkdir -p data/node1 data/node2 data/node3
	mkdir -p bin

.DEFAULT_GOAL := build
