.PHONY: build install uninstall test clean release release-all \
        release-linux-x86 release-linux-arm64

INSTALL_DIR := $(HOME)/.local/bin
SHARE_DIR   := $(HOME)/.local/share/ash
VERSION     := $(shell grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
ARCH        := $(shell uname -m)
OS          := $(shell uname -s | tr '[:upper:]' '[:lower:]')
DIST        := dist

# ── Development ───────────────────────────────────────────────────────────────

build:
	cargo build --release

test: build
	cargo test
	bash tests/integration.sh target/release/ash

clean:
	cargo clean
	rm -rf $(DIST)

# ── Install / Uninstall ───────────────────────────────────────────────────────

install: build
	@mkdir -p "$(INSTALL_DIR)" "$(SHARE_DIR)"
	cp target/release/ash "$(INSTALL_DIR)/ash"
	cp scripts/ash.sh     "$(SHARE_DIR)/ash.sh"
	@echo "Installed ash  → $(INSTALL_DIR)/ash"
	@echo "Shell hook     → $(SHARE_DIR)/ash.sh"
	@echo ""
	@echo "Add to your shell profile:"
	@echo "  export ASH_BIN=\"$(INSTALL_DIR)/ash\""
	@echo "  source \"$(SHARE_DIR)/ash.sh\""

uninstall:
	rm -f  "$(INSTALL_DIR)/ash"
	rm -rf "$(SHARE_DIR)"
	@echo "Uninstalled ash."

# ── Release packaging ─────────────────────────────────────────────────────────
# Note: the release profile in Cargo.toml already sets strip = true and lto = true.
# The `strip` command below is belt-and-suspenders for hosts where Cargo's strip
# option does not fire (older toolchain versions).

release: build
	@mkdir -p $(DIST)
	strip target/release/ash 2>/dev/null || true
	tar -czf $(DIST)/ash-$(VERSION)-$(ARCH)-$(OS).tar.gz \
	    -C target/release ash
	@echo "Packaged → $(DIST)/ash-$(VERSION)-$(ARCH)-$(OS).tar.gz"
	@ls -lh $(DIST)/ash-$(VERSION)-$(ARCH)-$(OS).tar.gz

# Cross-compiled releases — requires `cross` (cargo install cross) and Docker.
CROSS_TARGETS := x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu

release-all: $(addprefix $(DIST)/ash-$(VERSION)-, \
               $(addsuffix .tar.gz, $(CROSS_TARGETS)))

$(DIST)/ash-$(VERSION)-%.tar.gz:
	cross build --release --target $*
	@strip target/$*/release/ash 2>/dev/null || \
	    llvm-strip target/$*/release/ash 2>/dev/null || \
	    echo "Note: strip unavailable for $*, skipping"
	@mkdir -p $(DIST)
	tar -czf $@ -C target/$*/release ash
	@echo "Packaged → $@"
	@ls -lh $@

release-linux-x86: $(DIST)/ash-$(VERSION)-x86_64-unknown-linux-gnu.tar.gz

release-linux-arm64: $(DIST)/ash-$(VERSION)-aarch64-unknown-linux-gnu.tar.gz
