BINARY   := ezcoo-usb-control
VERSION  ?= 0.1.0
CMD      := ./cmd/$(BINARY)

BUILD_DIR := build
DIST_DIR  := dist

DEB_TARGETS := arm64 armhf amd64

.PHONY: build deb-all $(addprefix deb-,$(DEB_TARGETS)) clean deps prepare lint

deps:
	go mod tidy

prepare: deps
	go mod download
	go generate ./...

lint: prepare
	gofmt -w -s .
	goimports -w .
	go vet ./...
	golangci-lint run --color always

build: prepare
	mkdir -p $(BUILD_DIR)
	go build -o $(BUILD_DIR)/$(BINARY) $(CMD)

# ── Per-architecture .deb builder ─────────────────────────────────────────────
# $(1) = Debian arch (arm64 / armhf / amd64)
# $(2) = GOARCH       (arm64 / arm  / amd64)
# $(3) = GOARM        (7 for armhf, empty otherwise)
define make_deb
	$(eval BIN     := $(BUILD_DIR)/$(BINARY)-$(1))
	$(eval PKG_DIR := $(BUILD_DIR)/pkg-$(1))
	$(eval DEB_OUT := $(DIST_DIR)/$(BINARY)_$(VERSION)_$(1).deb)
	$(eval GO_ENV  := GOOS=linux GOARCH=$(2)$(if $(3), GOARM=$(3),))

	mkdir -p $(BUILD_DIR) $(DIST_DIR)
	$(GO_ENV) go build -o $(BIN) $(CMD)

	rm -rf $(PKG_DIR)

	install -D -m 0755 $(BIN) $(PKG_DIR)/usr/bin/$(BINARY)
	install -D -m 0640 cmd/ezcoo-usb-control/config.example.yaml $(PKG_DIR)/etc/$(BINARY)/config.yaml
	install -D -m 0644 packaging/systemd/$(BINARY).service $(PKG_DIR)/lib/systemd/system/$(BINARY).service

	install -d $(PKG_DIR)/DEBIAN
	sed -e 's/VERSION_PLACEHOLDER/$(VERSION)/' \
	    -e 's/ARCH_PLACEHOLDER/$(1)/' \
	    packaging/DEBIAN/control  > $(PKG_DIR)/DEBIAN/control
	install -m 0644 packaging/DEBIAN/conffiles  $(PKG_DIR)/DEBIAN/conffiles
	install -m 0755 packaging/DEBIAN/postinst   $(PKG_DIR)/DEBIAN/postinst
	install -m 0755 packaging/DEBIAN/prerm      $(PKG_DIR)/DEBIAN/prerm
	install -m 0755 packaging/DEBIAN/postrm     $(PKG_DIR)/DEBIAN/postrm

	dpkg-deb --build --root-owner-group $(PKG_DIR) $(DEB_OUT)
	rm -rf $(PKG_DIR)
	@echo "→ $(DEB_OUT)"
endef

deb-arm64:
	$(call make_deb,arm64,arm64,)

deb-armhf:
	$(call make_deb,armhf,arm,7)

deb-amd64:
	$(call make_deb,amd64,amd64,)

deb-all: $(addprefix deb-,$(DEB_TARGETS))
	@echo ""
	@echo "Built packages:"
	@ls -lh $(DIST_DIR)/$(BINARY)_$(VERSION)_*.deb

clean:
	rm -rf $(BUILD_DIR) $(DIST_DIR)
