# Variables
CC = gcc
VALAC = valac
PKG = --pkg gtk+-3.0 --pkg x11 --pkg gdk-x11-3.0
APP_NAME = rox-tiler
VERSION = 1.0
SRC = src/main.vala

# Installation paths
PREFIX ?= /usr/local
BINDIR = $(PREFIX)/bin
DATADIR = $(PREFIX)/share

# Default target
all: $(APP_NAME)

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

# --- System-wide installation ---
install: $(APP_NAME)
	@echo "Installing $(APP_NAME) to $(BINDIR)..."
	install -d $(DESTDIR)$(BINDIR)
	install -m 755 $(APP_NAME) $(DESTDIR)$(BINDIR)/$(APP_NAME)
	
	@echo "Creating and installing desktop entry..."
	install -d $(DESTDIR)$(DATADIR)/applications
	echo "[Desktop Entry]" > $(APP_NAME).desktop
	echo "Type=Application" >> $(APP_NAME).desktop
	echo "Name=Rox Tiler" >> $(APP_NAME).desktop
	echo "Comment=Tiles ROX-Filer windows side-by-side" >> $(APP_NAME).desktop
	echo "Exec=$(APP_NAME)" >> $(APP_NAME).desktop
	echo "Icon=system-file-manager" >> $(APP_NAME).desktop
	echo "Categories=Utility;System;" >> $(APP_NAME).desktop
	install -m 644 $(APP_NAME).desktop $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
	rm -f $(APP_NAME).desktop
	@echo "Installation completed successfully!"

# --- Uninstallation ---
uninstall:
	@echo "Removing $(APP_NAME) from $(BINDIR)..."
	rm -f $(DESTDIR)$(BINDIR)/$(APP_NAME)
	@echo "Removing desktop entry..."
	rm -f $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
	@echo "Uninstallation completed!"

# --- Package Source Archive ---
src:
	@echo "Creating source tarball..."
	rm -rf dist_src
	mkdir -p dist_src/$(APP_NAME)-$(VERSION)/src
	# Copy source files, Makefile, and README
	cp $(SRC) dist_src/$(APP_NAME)-$(VERSION)/src/
	cp Makefile dist_src/$(APP_NAME)-$(VERSION)/
	cp README.md dist_src/$(APP_NAME)-$(VERSION)/
	# Compress into tar.gz
	cd dist_src && tar -czf ../$(APP_NAME)-$(VERSION)-src.tar.gz $(APP_NAME)-$(VERSION)/
	rm -rf dist_src
	@echo "Source tarball $(APP_NAME)-$(VERSION)-src.tar.gz created successfully!"

# Cleaning build products
clean:
	rm -f $(APP_NAME)
	rm -rf dist_deb/ dist_pet/ dist_src/
	rm -f *.deb *.pet *.desktop *.tar.gz

# --- Debian 64-Bit Package (.deb) ---
deb64:
	@echo "Building Debian 64-bit package..."
	rm -rf dist_deb
	mkdir -p dist_deb/usr/bin
	mkdir -p dist_deb/usr/share/applications
	mkdir -p dist_deb/DEBIAN
	
	$(VALAC) $(PKG) -X -m64 $(SRC) -o dist_deb/usr/bin/$(APP_NAME)
	
	echo "Package: $(APP_NAME)" > dist_deb/DEBIAN/control
	echo "Version: $(VERSION)" >> dist_deb/DEBIAN/control
	echo "Section: utils" >> dist_deb/DEBIAN/control
	echo "Priority: optional" >> dist_deb/DEBIAN/control
	echo "Architecture: amd64" >> dist_deb/DEBIAN/control
	echo "Depends: libc6, libgtk-3-0, libx11-6, libgdk-pixbuf2.0-0, rox-filer" >> dist_deb/DEBIAN/control
	echo "Maintainer: Mark <mark@localhost>" >> dist_deb/DEBIAN/control
	echo "Description: A smart window tiler utility for ROX-Filer." >> dist_deb/DEBIAN/control
	
	echo "[Desktop Entry]" > dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Type=Application" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Name=Rox Tiler" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Comment=Tiles ROX-Filer windows side-by-side" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Exec=$(APP_NAME)" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Icon=system-file-manager" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Categories=Utility;System;" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	
	dpkg-deb --build dist_deb $(APP_NAME)_$(VERSION)_amd64.deb
	rm -rf dist_deb
	@echo "Debian 64-bit package created successfully!"

# --- Debian 32-Bit Package (.deb) ---
deb32:
	@echo "Building Debian 32-bit package..."
	rm -rf dist_deb
	mkdir -p dist_deb/usr/bin
	mkdir -p dist_deb/usr/share/applications
	mkdir -p dist_deb/DEBIAN
	
	$(VALAC) $(PKG) -X -m32 $(SRC) -o dist_deb/usr/bin/$(APP_NAME)
	
	echo "Package: $(APP_NAME)" > dist_deb/DEBIAN/control
	echo "Version: $(VERSION)" >> dist_deb/DEBIAN/control
	echo "Section: utils" >> dist_deb/DEBIAN/control
	echo "Priority: optional" >> dist_deb/DEBIAN/control
	echo "Architecture: i386" >> dist_deb/DEBIAN/control
	echo "Depends: libc6, libgtk-3-0, libx11-6, libgdk-pixbuf2.0-0, rox-filer" >> dist_deb/DEBIAN/control
	echo "Maintainer: Mark <mark@localhost>" >> dist_deb/DEBIAN/control
	echo "Description: A smart window tiler utility for ROX-Filer." >> dist_deb/DEBIAN/control
	
	echo "[Desktop Entry]" > dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Type=Application" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Name=Rox Tiler" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Exec=$(APP_NAME)" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Icon=system-file-manager" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	echo "Categories=Utility;System;" >> dist_deb/usr/share/applications/$(APP_NAME).desktop
	
	dpkg-deb --build dist_deb $(APP_NAME)_$(VERSION)_i386.deb
	rm -rf dist_deb
	@echo "Debian 32-bit package created successfully!"

# --- Puppy Linux 64-Bit Package (.pet) ---
pet64:
	@echo "Building Puppy Linux 64-bit (.pet) package..."
	rm -rf dist_pet
	mkdir -p dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/local/bin
	mkdir -p dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications
	
	$(VALAC) $(PKG) -X -m64 $(SRC) -o dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/local/bin/$(APP_NAME)
	
	echo "[Desktop Entry]" > dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	echo "Type=Application" >> dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	echo "Name=Rox Tiler" >> dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	echo "Exec=$(APP_NAME)" >> dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	echo "Icon=system-file-manager" >> dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	echo "Categories=Utility;X-Utility;" >> dist_pet/$(APP_NAME)-$(VERSION)-x86_64/usr/share/applications/$(APP_NAME).desktop
	
	cd dist_pet && tar -czf $(APP_NAME)-$(VERSION)-x86_64.tar.gz $(APP_NAME)-$(VERSION)-x86_64/
	cd dist_pet && md5sum $(APP_NAME)-$(VERSION)-x86_64.tar.gz | cut -f1 -d' ' > $(APP_NAME)-$(VERSION)-x86_64.tar.gz.md5
	cd dist_pet && cat $(APP_NAME)-$(VERSION)-x86_64.tar.gz $(APP_NAME)-$(VERSION)-x86_64.tar.gz.md5 > ../$(APP_NAME)-$(VERSION)-x86_64.pet
	rm -rf dist_pet
	@echo "Puppy Linux 64-bit PET package created successfully!"

# --- Puppy Linux 32-Bit Package (.pet) ---
pet32:
	@echo "Building Puppy Linux 32-bit (.pet) package..."
	rm -rf dist_pet
	mkdir -p dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/local/bin
	mkdir -p dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications
	
	$(VALAC) $(PKG) -X -m32 $(SRC) -o dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/local/bin/$(APP_NAME)
	
	echo "[Desktop Entry]" > dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	echo "Type=Application" >> dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	echo "Name=Rox Tiler" >> dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	echo "Exec=$(APP_NAME)" >> dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	echo "Icon=system-file-manager" >> dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	echo "Categories=Utility;X-Utility;" >> dist_pet/$(APP_NAME)-$(VERSION)-i686/usr/share/applications/$(APP_NAME).desktop
	
	cd dist_pet && tar -czf $(APP_NAME)-$(VERSION)-i686.tar.gz $(APP_NAME)-$(VERSION)-i686/
	cd dist_pet && md5sum $(APP_NAME)-$(VERSION)-i686.tar.gz | cut -f1 -d' ' > $(APP_NAME)-$(VERSION)-i686.tar.gz.md5
	cd dist_pet && cat $(APP_NAME)-$(VERSION)-i686.tar.gz $(APP_NAME)-$(VERSION)-i686.tar.gz.md5 > ../$(APP_NAME)-$(VERSION)-i686.pet
	rm -rf dist_pet
	@echo "Puppy Linux 32-bit PET package created successfully!"

.PHONY: all clean install uninstall src deb64 deb32 pet64 pet32