#!/usr/bin/make -f
SHELL := /bin/bash
export DH_OPTIONS

.PHONY: update
.PHONY: generate-mo

APP_PATH := "usr/lib/solydxk/system"

SOURCE := $(shell dpkg-parsechangelog -S Source)
PYFILES := $(shell find $(APP_PATH) -name '*.py')
UIFILES := $(shell find $(APP_PATH) -name '*.ui')
SHFILES := $(shell find usr/bin -type f)
DTFILES := $(shell find usr/share -name '*.desktop')
POLFILES := $(shell find l10n/input -name '*.policy')
METAINFOFILES := $(shell find l10n/input -name '*.metainfo.xml')

POT := l10n/po/$(SOURCE).pot
PO_DIR := l10n/po
#HTML_DIR := l10n/html
#TEMP_DIR := l10n/temp
#EN_DIR := $(APP_PATH)/html/en


%:
	dh $@ --with=python3

# Use --no-start for oneshot services
override_dh_installsystemd:
	dh_installsystemd --name=lightdm-user-permission --no-enable --no-start
	dh_installsystemd --name=solydxk-adjust --no-start;
	dh_installsystemd --name=solydxk-cifs-umount
	dh_installsystemd --name=solydxk-minissdpd --no-start

override_dh_auto_clean:
	sudo rm -rf ./$(APP_PATH)/__pycache__/
	rm -rf $(PO_DIR)/mo
	mkdir -p $(PO_DIR)/mo
	po4a --rm-translations l10n/po4a/po4a.conf

override_dh_auto_install: generate-mo update

generate-mo:
	# Get Transifex translations before creating .mo files
	tx pull -a -f
	for PO in $(wildcard $(PO_DIR)/*.po); do \
		LANG=$$(basename "$$PO" .po); \
		mkdir -p $(PO_DIR)/mo; \
		msgfmt "$$PO" -o $(PO_DIR)/mo/$$LANG.mo; \
	done

update:
	# Download the latest lkddb.list file
	wget https://cateee.net/sources/lkddb/lkddb.list -O ./$(APP_PATH)/data/lkddb.list

	# Get Debian data
	python3 get_debian_data.py

	# ui files (Gtk4)
	itstool -i l10n/po4a/ui.its -o $(POT).tmp1 $(UIFILES)
	# metainfo files
	itstool -i l10n/po4a/metainfo.its -o $(POT).tmp2 $(METAINFOFILES)
	# policy files
	itstool -i l10n/po4a/polkit.its -o $(POT).tmp3 $(POLFILES)

	# Merge all temporary POT files into the final POT
	msgcat $(POT).tmp1 $(POT).tmp2 $(POT).tmp3 -o $(POT)

	# Clean up temporary files
	rm -f $(POT).tmp1 $(POT).tmp2 $(POT).tmp3

	# py files
	xgettext \
		--join-existing \
		--keyword=_ \
		--language=Python \
		--from-code=UTF-8 \
		--package-name=$(SOURCE) \
		--output=$(POT) \
		$(PYFILES)

	# bash files
	xgettext \
		--join-existing \
		--keyword=eval_gettext \
		--language=Shell \
		--from-code=UTF-8 \
		--output=$(POT) \
		$(SHFILES)

	# desktop files
	for LAUNCHER in $(DTFILES); do \
		sed -i '/^.*=\s*$$/d' $$LAUNCHER ; \
		sed -r \
			-e '/^(Name|Comment|GenericName|Keywords)\[/d' \
			-e 's/^(Name=|Comment=|GenericName=|Keywords=)/_\1/' \
			$$LAUNCHER > $$LAUNCHER.in ; \
		intltool-extract --type=gettext/ini $$LAUNCHER.in ; \
		xgettext \
			--join-existing \
			--keyword=N_:1 \
			--output=$(POT) \
			$$LAUNCHER.in.h ; \
		intltool-merge --quiet --desktop-style $(PO_DIR) $$LAUNCHER.in $$LAUNCHER ; \
		rm $$LAUNCHER.in.h $$LAUNCHER.in ; \
	done

	# join translations back into policy files
	for POL in $(POLFILES); do \
		FN=$$(basename $$POL); \
		itstool -j $$POL -o usr/share/polkit-1/actions/$$FN $(PO_DIR)/mo/*.mo; \
	done

	# join translations back into metainfo files
	for META in $(METAINFOFILES); do \
		FN=$$(basename $$META); \
		itstool -j $$META -o usr/share/metainfo/$$FN $(PO_DIR)/mo/*.mo; \
	done

	# Move the .mo files to their final destination
	for MO in $(PO_DIR)/mo/*.mo; do \
		LANG=$$(basename "$$MO" .mo); \
		MO_DIR=$(PO_DIR)/mo/$$LANG/LC_MESSAGES; \
		mkdir -p "$$MO_DIR"; \
		mv "$$MO" "$$MO_DIR/$(SOURCE).mo"; \
	done

	# Remove old temp files
	#rm -rf $(TEMP_DIR)
	#mkdir -p $(TEMP_DIR)

	# Create pot files from html files
	#html2po -i $(EN_DIR) -o $(TEMP_DIR) -P --duplicates=merge

	# Remove headers in generated pot files before merging
	#for P in $(TEMP_DIR)/*.pot; do \
	#	sed -i '1,/^$$/d' $$P ; \
	#done

	# Merge temp .pot files with POT
	#msgcat --use-first $(TEMP_DIR)/*.pot >> $(POT)

	# Merge new strings with translations
	#for POFILE in $(PO_DIR)/*.po; do \
	#	msgmerge --quiet --backup=none --update $$POFILE $(POT) ; \
	#done

	# Generate translated HTML
	#po4a ./l10n/po4a/po4a.conf

	# Remove incomplete translations
	#NRNEEDED=$$(ls $(EN_DIR) | wc -l); \
	#for D in $(HTML_DIR)/*; do \
	#	[ $$NRNEEDED -gt $$(ls $$D | wc -l) ] && rm -rf "$$D"; \
	#done

	# Push pot file to Transifex
	#tx push -s
