export JAVA_HOME = /usr/lib/jvm/java-17-openjdk-amd64
export ANDROID_HOME = /home/$(USER)/Android/Sdk

GRADLE      = ./gradlew
KEYSTORE   ?= /home/giovanni/.android/debug.keystore
KEY_ALIAS  ?= androiddebugkey
KEY_PASS   ?= android
BUILD_DIR   = app/build/outputs/apk/release
BUILD_TOOLS = $(ANDROID_HOME)/build-tools/36.0.0
EDITOR     ?= vi

# Cartella dove finiscono gli artefatti "pubblicati" (apk + qr code png).
# Non viene mai versionata ne' inclusa nel backup (vedi target "archive"):
# rigenerarla e' sempre possibile con "make app"/"make publish".
PUBLISHED_DIR ?= published

# Sorgente da cui si leggono BUILD_NUMBER/BUILD_DATE -- gli stessi valori
# mostrati dal box "Credits" dell'app. Letti con $(shell ...) in fase di
# parsing del Makefile (non nella recipe), quindi vanno bene cosi' come
# sono gia' nel sorgente al momento in cui lanci "make app" -- ricordati
# di averli gia' aggiornati (bump) prima della build, come per CW4LOM.
MAIN_ACTIVITY    = app/src/main/java/com/eladit/hb9eik/blueduo/MainActivity.java
BUILD_NUMBER_VAL := $(shell sed -n 's/.*BUILD_NUMBER *= *\([0-9]*\).*/\1/p' $(MAIN_ACTIVITY))
BUILD_DATE_VAL   := $(shell sed -n 's/.*BUILD_DATE *= *"\([0-9-]*\)".*/\1/p' $(MAIN_ACTIVITY))
DIST_APK          = BlueDuo-$(BUILD_NUMBER_VAL)-$(BUILD_DATE_VAL).apk

# --- Pubblicazione: copia sul server via ssh/scp + QR code per il download ---
REMOTE_HOST       ?= Aury
REMOTE_DIR        ?= /mntk8/hb9eik/download
DOWNLOAD_BASE_URL ?= https://www.hb9eik.ch/download
QR_TOOL           ?= qrencode
QR_FILE            = $(basename $(DIST_APK)).png

# --- Backup: archivio dell'intero progetto, sorgenti esclusi i generati ---
TAR         ?= sudo tar
ARCHIVE_NAME = BlueDUO-$(BUILD_NUMBER_VAL)-$(BUILD_DATE_VAL).tgz
ARCHIVE_EXCLUDES = \
	--exclude='build' \
	--exclude='.gradle' \
	--exclude='$(PUBLISHED_DIR)' \
	--exclude='local.properties' \
	--exclude='captures' \
	--exclude='.externalNativeBuild' \
	--exclude='.cxx'

.PHONY: all debug release release-signed app publish archive env install clean editconfig appconfig help

all: debug

debug:
	$(GRADLE) assembleDebug

release:
	$(GRADLE) assembleRelease

release-signed: release
	@echo "--- Allineamento APK con zipalign ---"
	$(BUILD_TOOLS)/zipalign -f -v 4 \
		$(BUILD_DIR)/app-release-unsigned.apk \
		$(BUILD_DIR)/app-release-aligned.apk
	@echo "--- Firma dell'APK con apksigner ---"
	$(BUILD_TOOLS)/apksigner sign --ks $(KEYSTORE) \
		--ks-key-alias $(KEY_ALIAS) \
		--ks-pass pass:$(KEY_PASS) \
		--out $(BUILD_DIR)/app-release-signed.apk \
		$(BUILD_DIR)/app-release-aligned.apk
	@echo "APK Firmato con successo in: $(BUILD_DIR)/app-release-signed.apk"

app: release-signed
	@if [ -z "$(BUILD_NUMBER_VAL)" ] || [ -z "$(BUILD_DATE_VAL)" ]; then \
		echo "!! Non sono riuscito a leggere BUILD_NUMBER/BUILD_DATE da $(MAIN_ACTIVITY) -- copia saltata."; \
		exit 1; \
	fi
	@mkdir -p $(PUBLISHED_DIR)
	@echo "--- Copio l'APK firmato in $(PUBLISHED_DIR)/$(DIST_APK) ---"
	cp $(BUILD_DIR)/app-release-signed.apk $(PUBLISHED_DIR)/$(DIST_APK)
	@echo "Creato: $(PUBLISHED_DIR)/$(DIST_APK)"

publish: app
	@echo "--- Copio $(DIST_APK) su $(REMOTE_HOST):$(REMOTE_DIR)/ via scp ---"
	scp $(PUBLISHED_DIR)/$(DIST_APK) $(REMOTE_HOST):$(REMOTE_DIR)/$(DIST_APK)
	@echo "--- Genero il QR code per $(DOWNLOAD_BASE_URL)/$(DIST_APK) ---"
	$(QR_TOOL) -o $(PUBLISHED_DIR)/$(QR_FILE) "$(DOWNLOAD_BASE_URL)/$(DIST_APK)"
	@echo "Fatto: $(DIST_APK) pubblicato, QR code in $(PUBLISHED_DIR)/$(QR_FILE)"

archive:
	@echo "--- Creo l'archivio di backup ../$(ARCHIVE_NAME) ---"
	$(TAR) $(ARCHIVE_EXCLUDES) -czvf ../$(ARCHIVE_NAME) .
	@echo "Creato: ../$(ARCHIVE_NAME)"

pubkey:
	keytool -exportcert -rfc -alias $(KEY_ALIAS) -keystore $(KEYSTORE) -storepass $(KEY_PASS) -file blueduo_cert.pem

sha:
	keytool -printcert -jarfile $(BUILD_DIR)/app-release-signed.apk

env:
	@echo "--- Creazione alberatura directory ---"
	mkdir -p app/src/main/java/com/eladit/hb9eik/blueduo
	@echo "--- Creazione file vuoti (se non esistono già) ---"
	@test -f build.gradle || touch build.gradle
	@test -f settings.gradle || touch settings.gradle
	@test -f app/build.gradle || touch app/build.gradle
	@test -f gradle.properties || touch gradle.properties
	@test -f app/src/main/AndroidManifest.xml || touch app/src/main/AndroidManifest.xml
	@test -f app/src/main/java/com/eladit/hb9eik/blueduo/MainActivity.java || touch app/src/main/java/com/eladit/hb9eik/blueduo/MainActivity.java
	@echo "Ambiente verificato e pronto per BlueDuo."

install:
	$(GRADLE) installDebug

clean:
	$(GRADLE) clean

editconfig:
	$(EDITOR) build.gradle

appconfig:
	$(EDITOR) app/build.gradle
