VALAC = valac
VALAFLAGS = --pkg gtk+-3.0 --pkg gdk-3.0
TARGET = mu-picture
SRC = mu-picture.vala

VERSION = 1.0.1
DIST_NAME = $(TARGET)-$(VERSION)

# Determine the real user's home directory even when run via sudo
REAL_USER ?= $(SUDO_USER)
ifeq ($(REAL_USER),)
    REAL_USER := $(USER)
endif
REAL_HOME := $(shell getent passwd $(REAL_USER) | cut -d: -f6)
ifeq ($(REAL_HOME),)
    REAL_HOME := $(HOME)
endif

all: $(TARGET)

$(TARGET): $(SRC)
	$(VALAC) $(VALAFLAGS) $(SRC) -o $(TARGET)

clean:
	rm -f $(TARGET) *.deb *.tar.gz mu-picture.desktop
	rm -rf deb_stage $(DIST_NAME)

mu-picture.desktop:
	@echo "[Desktop Entry]" > mu-picture.desktop
	@echo "Type=Application" >> mu-picture.desktop
	@echo "Name=mu-picture" >> mu-picture.desktop
	@echo "Comment=Lightweight GTK3 Image & Slideshow Viewer" >> mu-picture.desktop
	@echo "Exec=/usr/local/bin/mu-picture" >> mu-picture.desktop
	@echo "Terminal=false" >> mu-picture.desktop
	@echo "Categories=Graphics;Viewer;" >> mu-picture.desktop

install: $(TARGET) mu-picture.desktop
	@echo "Installing binary and desktop file..."
	install -d $(DESTDIR)/usr/local/bin
	install -m 755 $(TARGET) $(DESTDIR)/usr/local/bin/
	
	install -d $(DESTDIR)/usr/local/share/applications
	install -m 644 mu-picture.desktop $(DESTDIR)/usr/local/share/applications/
	@if command -v update-desktop-database >/dev/null 2>&1; then \
		update-desktop-database -q; \
	fi

	@echo "Installing configuration files and assets to $(REAL_HOME)/.mu-picture (for user $(REAL_USER))..."
	install -d -o $(REAL_USER) -g $(REAL_USER) $(REAL_HOME)/.mu-picture
	
	@for f in mu-picture_example1.rc mu-picture_example2.rc picture1.rc picture2.rc example1.jpg example2.jpg; do \
		if [ ! -f "$(REAL_HOME)/.mu-picture/$$f" ]; then \
			cp "$$f" "$(REAL_HOME)/.mu-picture/"; \
			chown $(REAL_USER):$(REAL_USER) "$(REAL_HOME)/.mu-picture/$$f"; \
		fi; \
	done
	@echo "Installation complete."

source: mu-picture.desktop
	@echo "Creating source distribution archive..."
	mkdir -p $(DIST_NAME)
	cp $(SRC) Makefile README.md mu-picture.desktop \
	   mu-picture_example1.rc mu-picture_example2.rc \
	   picture1.rc picture2.rc \
	   example1.jpg example2.jpg $(DIST_NAME)/
	tar -czf $(DIST_NAME).tar.gz $(DIST_NAME)
	rm -rf $(DIST_NAME)
	@echo "Source package created: $(DIST_NAME).tar.gz"

deb: $(TARGET) mu-picture.desktop
	@echo "Building Debian package structure..."
	mkdir -p deb_stage/usr/bin
	mkdir -p deb_stage/usr/share/applications
	mkdir -p deb_stage/usr/share/mu-picture
	mkdir -p deb_stage/DEBIAN

	cp $(TARGET) deb_stage/usr/bin/
	cp mu-picture.desktop deb_stage/usr/share/applications/
	cp mu-picture_example1.rc mu-picture_example2.rc picture1.rc picture2.rc example1.jpg example2.jpg deb_stage/usr/share/mu-picture/

	@echo '#!/bin/bash' > deb_stage/DEBIAN/postinst
	@echo 'TARGET_USER=$${SUDO_USER:-$$USER}' >> deb_stage/DEBIAN/postinst
	@echo 'if [ "$$TARGET_USER" = "root" ] && [ -n "$$PKEXEC_UID" ]; then TARGET_USER=$$(getent passwd "$$PKEXEC_UID" | cut -d: -f1); fi' >> deb_stage/DEBIAN/postinst
	@echo 'TARGET_HOME=$$(getent passwd "$$TARGET_USER" | cut -d: -f6)' >> deb_stage/DEBIAN/postinst
	@echo '[ -z "$$TARGET_HOME" ] && TARGET_HOME=$$HOME' >> deb_stage/DEBIAN/postinst
	@echo 'mkdir -p "$$TARGET_HOME/.mu-picture"' >> deb_stage/DEBIAN/postinst
	@echo 'for f in mu-picture_example1.rc mu-picture_example2.rc picture1.rc picture2.rc example1.jpg example2.jpg; do' >> deb_stage/DEBIAN/postinst
	@echo '    if [ ! -f "$$TARGET_HOME/.mu-picture/$$f" ]; then' >> deb_stage/DEBIAN/postinst
	@echo '        cp "/usr/share/mu-picture/$$f" "$$TARGET_HOME/.mu-picture/"' >> deb_stage/DEBIAN/postinst
	@echo '    fi' >> deb_stage/DEBIAN/postinst
	@echo 'done' >> deb_stage/DEBIAN/postinst
	@echo 'chown -R "$$TARGET_USER:$$TARGET_USER" "$$TARGET_HOME/.mu-picture"' >> deb_stage/DEBIAN/postinst
	@echo 'which update-desktop-database >/dev/null 2>&1 && update-desktop-database -q || true' >> deb_stage/DEBIAN/postinst
	chmod +x deb_stage/DEBIAN/postinst

	@echo "Package: mu-picture\nVersion: $(VERSION)\nSection: graphics\nPriority: optional\nArchitecture: amd64\nMaintainer: Mark Ulrich <markulrich@gmx.de>\nDepends: libgtk-3-0, libglib2.0-0\nDescription: Lightweight GTK3 image and slideshow viewer container." > deb_stage/DEBIAN/control

	dpkg-deb --build deb_stage $(TARGET)_$(VERSION)_amd64.deb
	rm -rf deb_stage
	@echo "Package built successfully: $(TARGET)_$(VERSION)_amd64.deb"

.PHONY: all clean install source deb