BINARY := lazy-update-manager
PREFIX ?= $(HOME)/.local
APP_DIR := $(CURDIR)

# Versioning: try to use git describe, fall back to 'dev'
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
BUILD_TIME := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")

.PHONY: build desktop desktop-dist install install-user-service enable-user-service test fmt clean

build:
	@echo "Building $(BINARY) (version: $(VERSION), build time: $(BUILD_TIME))"
	go build -buildvcs=false -ldflags "-X 'lazy-update-manager/internal/version.Version=$(VERSION)' -X 'lazy-update-manager/internal/version.BuildTime=$(BUILD_TIME)'" -o bin/$(BINARY) ./cmd/lazy-update-manager

desktop:
	npm run start

desktop-dist:
	npm run dist

install: build
	@mkdir -p $(PREFIX)/bin
	@mkdir -p $(PREFIX)/share/applications
	@mkdir -p $(HOME)/.config/systemd/user
	@echo "Installing $(BINARY) to $(PREFIX)/bin"
	@if [ -f "$(PREFIX)/bin/$(BINARY)" ]; then \
		if cmp -s bin/$(BINARY) "$(PREFIX)/bin/$(BINARY)"; then \
			echo "Existing binary is identical; skipping overwrite."; \
		else \
			ts=$$(date +%Y%m%d%H%M%S); \
			mv "$(PREFIX)/bin/$(BINARY)" "$(PREFIX)/bin/$(BINARY)-$$ts.bak"; \
			echo "Backed up previous binary to $(PREFIX)/bin/$(BINARY)-$$ts.bak"; \
			install -Dm755 bin/$(BINARY) $(PREFIX)/bin/$(BINARY); \
		fi; \
	else \
		install -Dm755 bin/$(BINARY) $(PREFIX)/bin/$(BINARY); \
	fi; \
	{ \
		echo "[Desktop Entry]"; \
		echo "Type=Application"; \
		echo "Name=LazyUpdateManager"; \
		echo "Comment=Arch and Hyprland update helper"; \
		echo "Exec=$(PREFIX)/bin/$(BINARY) gui"; \
		echo "Path=$(APP_DIR)"; \
		echo "Icon=system-software-update"; \
		echo "Terminal=false"; \
		echo "Categories=System;Utility;"; \
	} > $(PREFIX)/share/applications/lazy-update-manager.desktop; \
	install -Dm644 systemd/lazy-update-manager.service $(HOME)/.config/systemd/user/lazy-update-manager.service; \
	install -Dm644 systemd/lazy-update-manager.timer $(HOME)/.config/systemd/user/lazy-update-manager.timer; \
	if command -v systemctl >/dev/null 2>&1 && systemctl --user daemon-reload >/dev/null 2>&1; then \
		systemctl --user enable --now lazy-update-manager.timer; \
		echo "Enabled lazy-update-manager.timer for update notifications"; \
	else \
		echo "Installed user service files, but could not access the user systemd session."; \
		echo "Run manually: systemctl --user daemon-reload && systemctl --user enable --now lazy-update-manager.timer"; \
	fi; \
	echo "Installed $(BINARY) to $(PREFIX)/bin"

install-user-service: install
	@echo "User service installation is included in 'make install'."

enable-user-service: install-user-service
	@echo "Timer activation is included in 'make install'."

test:
	go test ./...

fmt:
	gofmt -w ./cmd ./internal

clean:
	rm -rf bin
