# Variables
APP_NAME = mu-gemini-coder
VERSION = 1.0.0
VALAC = valac
PKGS = --pkg gtk+-3.0 --pkg json-glib-1.0 --pkg gio-2.0
SRC = app-view.vala app-window.vala build-engine.vala main.vala
BACKEND = assistant.py
LAUNCHER = mu-gemini-coder-launch
DESKTOP = mu-gemini-coder.desktop
DOCS = README.md

# Install Paths
PREFIX = /usr
BINDIR = $(PREFIX)/bin
SHAREDIR = $(PREFIX)/share/$(APP_NAME)
APPDIR = $(PREFIX)/share/applications

all: $(APP_NAME)

$(APP_NAME): $(SRC)
	$(VALAC) $(PKGS) $(SRC) -o $(APP_NAME)

clean:
	rm -f $(APP_NAME)
	rm -rf debian_build
	rm -f $(APP_NAME)_$(VERSION)_*.deb
	rm -rf src_tarball_build
	rm -f $(APP_NAME)-src_$(VERSION).tar.gz

install: $(APP_NAME)
	install -d $(DESTDIR)$(BINDIR)
	install -d $(DESTDIR)$(SHAREDIR)
	install -d $(DESTDIR)$(APPDIR)
	install -m 755 $(APP_NAME) $(DESTDIR)$(BINDIR)/$(APP_NAME)
	install -m 755 $(LAUNCHER) $(DESTDIR)$(BINDIR)/$(LAUNCHER)
	install -m 644 $(BACKEND) $(DESTDIR)$(SHAREDIR)/$(BACKEND)
	install -m 644 $(DOCS) $(DESTDIR)$(SHAREDIR)/$(DOCS)
	install -m 644 $(DESKTOP) $(DESTDIR)$(APPDIR)/$(DESKTOP)

uninstall:
	rm -f $(DESTDIR)$(BINDIR)/$(APP_NAME)
	rm -f $(DESTDIR)$(BINDIR)/$(LAUNCHER)
	rm -rf $(DESTDIR)$(SHAREDIR)
	rm -f $(DESTDIR)$(APPDIR)/$(DESKTOP)

# Packaged structural pipeline for native Debian deployments (.deb)
deb: $(APP_NAME)
	@echo "Checking environment for 'GEMINI_API_KEY'..."
	@if [ -z "$$GEMINI_API_KEY" ]; then \
		echo "WARNING: GEMINI_API_KEY is not defined in your shell. The packaged app will require it at runtime."; \
	fi
	rm -rf debian_build
	mkdir -p debian_build/DEBIAN
	mkdir -p debian_build$(BINDIR)
	mkdir -p debian_build$(SHAREDIR)
	mkdir -p debian_build$(APPDIR)
	
	echo "Package: $(APP_NAME)" > debian_build/DEBIAN/control
	echo "Version: $(VERSION)" >> debian_build/DEBIAN/control
	echo "Section: utils" >> debian_build/DEBIAN/control
	echo "Priority: optional" >> debian_build/DEBIAN/control
	echo "Architecture: all" >> debian_build/DEBIAN/control
	echo "Depends: libgtk-3-0, libjson-glib-1.0-0, python3, python3-pip, geany, zenity" >> debian_build/DEBIAN/control
	echo "Homepage: https://github.com" >> debian_build/DEBIAN/control
	echo "License: GPL-2+" >> debian_build/DEBIAN/control
	echo "Maintainer: Your Name <your.email@example.com>" >> debian_build/DEBIAN/control
	echo "Description: A lightweight and minimal GTK3 open-source AI coding shell utilizing the Gemini API." >> debian_build/DEBIAN/control

	install -m 755 $(APP_NAME) debian_build$(BINDIR)/$(APP_NAME)
	install -m 755 $(LAUNCHER) debian_build$(BINDIR)/$(LAUNCHER)
	install -m 644 $(BACKEND) debian_build$(SHAREDIR)/$(BACKEND)
	install -m 644 $(DOCS) debian_build$(SHAREDIR)/$(DOCS)
	install -m 644 $(DESKTOP) debian_build$(APPDIR)/$(DESKTOP)
	
	dpkg-deb --build debian_build
	mv debian_build.deb $(APP_NAME)_$(VERSION)_all.deb
	@echo "=========================================================="
	@echo "Success! Package assembled: $(APP_NAME)_$(VERSION)_all.deb"
	@echo "=========================================================="

# NEW TARGET: Compiles a clean open-source workspace source snapshot code backup archive
src:
	@echo "Assembling pure open-source code tree package..."
	rm -rf src_tarball_build
	rm -f $(APP_NAME)-src_$(VERSION).tar.gz
	
	# Instantiate an isolated staging workspace container folder root
	mkdir -p src_tarball_build/$(APP_NAME)-src_$(VERSION)
	
	# Populating staging layouts with source tree parameters explicitly
	cp $(SRC) src_tarball_build/$(APP_NAME)-src_$(VERSION)/
	cp $(BACKEND) $(LAUNCHER) $(DESKTOP) $(DOCS) Makefile src_tarball_build/$(APP_NAME)-src_$(VERSION)/
	
	# Serialize file nodes into compressed gzip structures using tar utilities
	cd src_tarball_build && tar -czf ../$(APP_NAME)-src_$(VERSION).tar.gz $(APP_NAME)-src_$(VERSION)
	
	# Clear volatile deployment working environments
	rm -rf src_tarball_build
	@echo "=========================================================="
	@echo "Success! Pristine source code package built under GPL-2+:"
	@echo "Output File: $(APP_NAME)-src_$(VERSION).tar.gz"
	@echo "=========================================================="

.PHONY: all clean install uninstall deb src