.PHONY: all clean pack repack-ramdisk repack-boot create-zip

WORK_DIR := $(PWD)
BOOT_IMG := boot.img
KERNEL_FILE := extracted_boot/kernel
RAMDISK_DIR := ramdisk
ROOTFS_DIR := debian_a20e
OUTPUT_ZIP := debian_a20e.zip
TEMP_DIR := temp_build

# Sizes and offsets
KERNEL_OFFSET := 0xE64800
RAMDISK_OFFSET := 0x1ED5800

all: create-zip

repack-ramdisk:
	@echo "Repacking ramdisk..."
	@mkdir -p $(TEMP_DIR)
	@cd $(RAMDISK_DIR) && find . -print0 | cpio -0 -o -H newc | gzip > ../$(TEMP_DIR)/ramdisk.cpio.gz
	@echo "Ramdisk repacked: $(TEMP_DIR)/ramdisk.cpio.gz"

repack-boot: repack-ramdisk
	@echo "Repacking boot.img..."
	@mkdir -p $(TEMP_DIR)/boot
	# Extract kernel
	@dd if=$(BOOT_IMG) bs=1 skip=$$(($(KERNEL_OFFSET))) count=$$(stat -f%z "$(KERNEL_FILE)" 2>/dev/null || stat -c%s "$(KERNEL_FILE)") of=$(TEMP_DIR)/boot/kernel 2>/dev/null || true
	# Copy repacked ramdisk
	@cp $(TEMP_DIR)/ramdisk.cpio.gz $(TEMP_DIR)/boot/ramdisk.cpio.gz
	# Repack with mkbootimg (u might need to adjust args based on original)
	@mkbootimg --kernel $(TEMP_DIR)/boot/kernel --ramdisk $(TEMP_DIR)/boot/ramdisk.cpio.gz --output $(TEMP_DIR)/boot.img --pagesize 2048 2>/dev/null || echo "mkbootimg not found, using original boot.img"
	@test -f $(TEMP_DIR)/boot.img || cp $(BOOT_IMG) $(TEMP_DIR)/boot.img
	@echo "Boot.img repacked"

create-rootfs-tar:
	@echo "Creating rootfs tarball..."
	@mkdir -p $(TEMP_DIR)
	@cd $(ROOTFS_DIR) && tar czf ../$(TEMP_DIR)/system.tar.gz . 2>/dev/null || tar czf ../$(TEMP_DIR)/system.tar.gz --exclude=proc --exclude=sys .
	@echo "Rootfs tarball created"

create-zip: repack-boot create-rootfs-tar
	@echo "Creating flashable zip..."
	@mkdir -p $(TEMP_DIR)/debian_rom
	# Copy META-INF (TWRP needs this)
	@mkdir -p $(TEMP_DIR)/debian_rom/META-INF/com/google/android
	@echo "ui_print(\"Installing Debian A20e...\");" > $(TEMP_DIR)/debian_rom/META-INF/com/google/android/update-binary
	@chmod +x $(TEMP_DIR)/debian_rom/META-INF/com/google/android/update-binary
	@echo "ui_print(\"Done\");" > $(TEMP_DIR)/debian_rom/META-INF/com/google/android/updater-script
	# Copy boot and rootfs
	@cp $(TEMP_DIR)/boot.img $(TEMP_DIR)/debian_rom/boot.img
	@cp $(TEMP_DIR)/system.tar.gz $(TEMP_DIR)/debian_rom/system.tar.gz
	# Create flash script
	@echo "#!/sbin/sh" > $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "OUTFD=\$$2" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "PARTITION=\$$(getprop ro.boot.bootdevice)" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "ui_print \"Flashing boot.img...\" >&\$$OUTFD" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "dd if=/sdcard/debian_rom/boot.img of=/dev/block/bootdevice/by-name/boot" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "ui_print \"Formatting and extracting rootfs...\" >&\$$OUTFD" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "mkfs.ext4 /dev/block/mmcblk0p32" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "mount /dev/block/mmcblk0p32 /mnt/root" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "cd /mnt/root && tar xzf /sdcard/debian_rom/system.tar.gz" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "umount /mnt/root" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@echo "ui_print \"Installation complete!\" >&\$$OUTFD" >> $(TEMP_DIR)/debian_rom/flash_debian.sh
	@chmod +x $(TEMP_DIR)/debian_rom/flash_debian.sh
	# Zip it up
	@cd $(TEMP_DIR)/debian_rom && zip -r ../../$(OUTPUT_ZIP) . -q
	@echo "Flashable zip created: $(OUTPUT_ZIP)"

clean:
	@echo "Cleaning up..."
	@rm -rf $(TEMP_DIR) $(OUTPUT_ZIP)
	@echo "Done"

help:
	@echo "Available targets:"
	@echo "  make all              - Build everything and create flashable zip"
	@echo "  make repack-ramdisk   - Repack ramdisk from ramdisk/ directory"
	@echo "  make repack-boot      - Repack boot.img"
	@echo "  make create-zip       - Create flashable TWRP zip"
	@echo "  make clean            - Clean up build artifacts"
	@echo "  make help             - Show this help message"
