.PHONY: lint test build clean

# Lint all shell scripts with shellcheck
lint:
	@echo "Running shellcheck..."
	shellcheck -x lib/*.sh bin/josh-sync
	@echo "All checks passed."

# Run bats-core unit tests
test:
	@echo "Running tests..."
	bats tests/unit/
	@echo "All tests passed."

# Bundle into a single self-contained script
build: dist/josh-sync

dist/josh-sync: bin/josh-sync lib/*.sh VERSION
	@mkdir -p dist
	@echo "Bundling josh-sync..."
	@echo '#!/usr/bin/env bash' > dist/josh-sync
	@echo "# josh-sync $$(cat VERSION) — bundled distribution" >> dist/josh-sync
	@echo '# Generated by: make build' >> dist/josh-sync
	@echo '' >> dist/josh-sync
	@# Inline all library modules (strip shebangs and source directives)
	@for f in lib/core.sh lib/config.sh lib/auth.sh lib/state.sh lib/sync.sh lib/adopt.sh lib/onboard.sh; do \
		echo "# --- $$f ---" >> dist/josh-sync; \
		grep -v '^#!/' "$$f" | grep -v '^# shellcheck source=' >> dist/josh-sync; \
		echo '' >> dist/josh-sync; \
	done
	@# Append CLI (strip shebangs, source directives, and source commands)
	@echo '# --- bin/josh-sync ---' >> dist/josh-sync
	@grep -v '^#!/' bin/josh-sync \
		| grep -v '^# shellcheck source=' \
		| grep -v '^source "\$${JOSH_LIB_DIR}/' \
		| sed '/^JOSH_LIB_DIR=/,/^source/d' \
		>> dist/josh-sync
	@chmod +x dist/josh-sync
	@echo "Built: dist/josh-sync ($$(wc -l < dist/josh-sync) lines)"

clean:
	rm -rf dist/
