#!/usr/bin/make -f

export DH_VERBOSE = 1
export PYTHONDONTWRITEBYTECODE = 1

PKG  = arctis-sound-manager
DEST = debian/$(PKG)
PYLIB = $(DEST)/usr/lib/python3/dist-packages

# python3-dbus-next is in Debian and recent Ubuntu but not older Ubuntu.
# Depend on it when the build series ships it; otherwise bundle the wheel.
DBUS_NEXT_PKG := $(shell apt-cache show python3-dbus-next 2>/dev/null | grep -q '^Package:' && echo python3-dbus-next)

%:
	dh $@

override_dh_auto_build:
	# Regenerate debian/changelog from CHANGELOG.md only when the first line
	# has not already been patched for a target distro series (PPA/CI workflows
	# inject ~noble1 etc. before dpkg-buildpackage; regenerating would strip it
	# and cause a version mismatch between the .deb and the .changes file).
	if ! head -1 debian/changelog | grep -q '~'; then \
	    python3 scripts/generate_debian_changelog.py --in-place; \
	fi

	# If pre-built wheels exist (PPA / CI), use them; otherwise build
	if [ -d debian/wheels ]; then \
	    echo "Using pre-built wheels from debian/wheels/"; \
	else \
	    mkdir -p debian/wheels; \
	    python3 -m pip wheel --no-deps --wheel-dir=debian/wheels .; \
	    if [ -z "$(DBUS_NEXT_PKG)" ]; then python3 -m pip download --no-deps --dest=debian/wheels dbus-next; fi; \
	fi

override_dh_auto_install:
	# ── Python package ──────────────────────────────────────
	mkdir -p $(PYLIB) $(DEST)/usr/bin
	python3 -m pip install --target=$(PYLIB) --no-deps debian/wheels/arctis_sound_manager-*.whl
	# Bundle dbus-next only when this series' repos don't ship python3-dbus-next (issue #73)
	if [ -z "$(DBUS_NEXT_PKG)" ]; then \
	    python3 -m pip install --target=$(PYLIB) --no-deps debian/wheels/dbus_next-*.whl ; \
	fi
	# Clean bytecode (dpkg handles recompilation)
	find $(PYLIB) -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true

	# ── Console scripts ─────────────────────────────────────
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.daemon import main\nsys.exit(main())\n'         > $(DEST)/usr/bin/asm-daemon
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.cli import main\nsys.exit(main())\n'            > $(DEST)/usr/bin/asm-cli
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.gui import main\nsys.exit(main())\n'            > $(DEST)/usr/bin/asm-gui
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.video_router import main\nsys.exit(main())\n'   > $(DEST)/usr/bin/asm-router
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.stream_guard import main\nsys.exit(main())\n'    > $(DEST)/usr/bin/asm-stream-guard
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.clipd import main\nsys.exit(main())\n'          > $(DEST)/usr/bin/asm-clipd
	printf '#!/usr/bin/python3\nimport sys\nfrom arctis_sound_manager.scripts.setup import main\nsys.exit(main())\n'          > $(DEST)/usr/bin/asm-setup
	chmod 755 $(DEST)/usr/bin/asm-*

	# ── udev rules — generated from device YAMLs (single source of truth) ──
	install -d $(DEST)/usr/lib/udev/rules.d
	python3 scripts/generate_udev_rules.py src/arctis_sound_manager/devices/ \
	    > $(DEST)/usr/lib/udev/rules.d/91-steelseries-arctis.rules
	chmod 644 $(DEST)/usr/lib/udev/rules.d/91-steelseries-arctis.rules
	python3 scripts/generate_udev_rules.py --uaccess src/arctis_sound_manager/devices/ \
	    > $(DEST)/usr/lib/udev/rules.d/70-steelseries-arctis-uaccess.rules
	chmod 644 $(DEST)/usr/lib/udev/rules.d/70-steelseries-arctis-uaccess.rules

	# ── Systemd user services (single source of truth in systemd/) ──
	install -Dm644 systemd/arctis-manager.service \
	    $(DEST)/usr/lib/systemd/user/arctis-manager.service
	install -Dm644 systemd/arctis-video-router.service \
	    $(DEST)/usr/lib/systemd/user/arctis-video-router.service
	install -Dm644 systemd/arctis-stream-guard.service \
	    $(DEST)/usr/lib/systemd/user/arctis-stream-guard.service
	install -Dm644 systemd/app-ArctisManager.service \
	    $(DEST)/usr/lib/systemd/user/app-ArctisManager.service

	# ── Post-upgrade helper (packaging machinery, not in /usr/bin) ──
	install -Dm755 scripts/restart-user-services.sh \
	    $(DEST)/usr/lib/arctis-sound-manager/restart-user-services.sh

	# ── AppStream catalog entry ─────────────────────────────
	# Debian/Ubuntu still read the pre-1.0 location; AppStream reads whichever
	# one its version knows, and installing to both would double the component.
	install -d $(DEST)/usr/share/app-info/xml
	python3 scripts/generate_appstream_catalog.py \
	    --output $(DEST)/usr/share/app-info/xml/arctis-sound-manager.xml.gz
	chmod 644 $(DEST)/usr/share/app-info/xml/arctis-sound-manager.xml.gz

	# ── Desktop entry ───────────────────────────────────────
	install -Dm644 src/arctis_sound_manager/desktop/ArctisManager.desktop \
	    $(DEST)/usr/share/applications/ArctisManager.desktop

	# ── Icon ────────────────────────────────────────────────
	install -Dm644 src/arctis_sound_manager/gui/images/steelseries_logo.svg \
	    $(DEST)/usr/share/icons/hicolor/scalable/apps/arctis-manager.svg

	# ── Plasma 6 widget (headset status over D-Bus) ─────────
	install -Dm644 src/arctis_sound_manager/desktop/plasmoid/metadata.json \
	    $(DEST)/usr/share/plasma/plasmoids/com.github.loteran.arctis-sound-manager/metadata.json
	python3 scripts/generate_plasmoid_i18n.py
	for f in main.qml plasma5.qml tr.js strings.js; do \
	    install -Dm644 "src/arctis_sound_manager/desktop/plasmoid/contents/ui/$$f" \
	        $(DEST)/usr/share/plasma/plasmoids/com.github.loteran.arctis-sound-manager/contents/ui/$$f; \
	done

	# ── GNOME Shell extension (ChatMix OSD on GNOME Wayland) ─
	for f in metadata.json extension.js; do \
	    install -Dm644 "src/arctis_sound_manager/desktop/gnome-shell/asm-chatmix-osd@loteran.github.com/$$f" \
	        $(DEST)/usr/share/gnome-shell/extensions/asm-chatmix-osd@loteran.github.com/$$f; \
	done

	# ── AppStream metainfo (releases injected from CHANGELOG.md) ──
	python3 scripts/generate_metainfo_releases.py --in-place
	install -Dm644 src/arctis_sound_manager/desktop/com.github.loteran.arctis-sound-manager.metainfo.xml \
	    $(DEST)/usr/share/metainfo/com.github.loteran.arctis-sound-manager.metainfo.xml

	# ── PipeWire configs ────────────────────────────────────
	install -Dm644 scripts/pipewire/10-arctis-virtual-sinks.conf \
	    $(DEST)/usr/share/$(PKG)/pipewire/10-arctis-virtual-sinks.conf
	install -Dm644 scripts/pipewire/sink-virtual-surround-7.1-hesuvi.conf \
	    $(DEST)/usr/share/$(PKG)/pipewire/sink-virtual-surround-7.1-hesuvi.conf

	# ── filter-chain.service (bundled for distros that don't ship one) ──
	install -Dm644 scripts/filter-chain.service \
	    $(DEST)/usr/share/$(PKG)/filter-chain.service

	# ── Device configs ──────────────────────────────────────
	install -d $(DEST)/usr/share/$(PKG)/devices
	install -Dm644 src/arctis_sound_manager/devices/*.yaml \
	    -t $(DEST)/usr/share/$(PKG)/devices/

override_dh_gencontrol:
	dh_gencontrol -- -V'dbus-next:Depends=$(if $(DBUS_NEXT_PKG),python3-dbus-next,)'

override_dh_auto_test:
	@true

override_dh_auto_clean:
	rm -rf dist build *.egg-info
	# debian/wheels is intentionally preserved — it contains pre-built wheels
	# shipped inside the source package so Launchpad can build without internet.
