# kde-ollie Makefile
# Build order: cmake (KDE tools only — daemon is now in ../dbus)

BUILD_DIR := build-cmake

.PHONY: all clean run install uninstall \
        kf5 kf5-install kf5-uninstall \
        krunner-install dolphin-install plasmoid-install plasmoid-uninstall \
        tray data tools-install tools-uninstall

all: build data

# Build KDE tools (tray, krunner, kate, plasmoid)
build:
	cmake -B $(BUILD_DIR) -S .
	cmake --build $(BUILD_DIR) -j$$(nproc)

# Build using KF5/Qt5 (for Plasma 5.27)
KF5_BUILD_DIR := build-kf5

kf5:
	cmake -B $(KF5_BUILD_DIR) -S . -DOLLIE_KF5=ON
	cmake --build $(KF5_BUILD_DIR) -j$$(nproc)

# --- KF6 Install (default) ---

install: build
	@echo "=== Installing ollie-kde (KF6) ==="
	# Binaries
	install -m755 $(BUILD_DIR)/ollie-tray /usr/bin/
	install -m755 $(BUILD_DIR)/ollie-gui /usr/bin/
	# Desktop file and icon
	mkdir -p /usr/share/applications
	install -m644 gui/org.ollie.gui.desktop /usr/share/applications/
	mkdir -p /usr/share/icons/hicolor/scalable/apps
	install -m644 gui/ollie.svg /usr/share/icons/hicolor/scalable/apps/ollie.svg
	# KRunner plugin
	mkdir -p /usr/lib64/qt6/plugins/kf6/krunner
	install -m755 $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \
		/usr/lib64/qt6/plugins/kf6/krunner/
	# Kate plugin
	mkdir -p /usr/lib64/qt6/plugins/ktexteditor
	install -m755 $(BUILD_DIR)/lib/ktexteditor/ollie_kate.so \
		/usr/lib64/qt6/plugins/ktexteditor/
	# Plasmoid QML plugin library + metadata
	mkdir -p /usr/lib64/qt6/qml/org/ollie/private
	install -m755 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \
		/usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so
	install -m644 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \
		/usr/lib64/qt6/qml/org/ollie/private/
	install -m755 $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/
	printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \
		tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null
	# Plasmoid package (system-wide, matching lib install paths)
	kpackagetool6 -g -t Plasma/Applet -u plasmoid/ 2>/dev/null || \
		kpackagetool6 -g -t Plasma/Applet -i plasmoid/
	# Dolphin service menus + helper scripts
	mkdir -p ~/.local/share/kio/servicemenus
	rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
	install -m755 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/
	install -m755 dolphin/ollie-ask /usr/local/bin/
	install -m755 dolphin/ollie-session-here /usr/local/bin/
	# Finalize
	ldconfig
	kquitapp6 krunner 2>/dev/null; true
	@echo ""
	@echo "=== Installation complete (KF6) ==="
	@echo "Restart Kate, KRunner, and plasmashell to pick up plugins."

uninstall:
	@echo "=== Uninstalling ollie-kde ==="
	rm -f /usr/bin/ollie-tray /usr/bin/ollie-gui
	rm -f /usr/share/applications/org.ollie.gui.desktop
	rm -f /usr/share/icons/hicolor/scalable/apps/ollie.svg
	rm -f /usr/lib64/libollie-plasmoid-plugin.so
	rm -f /usr/lib64/qt6/plugins/kf6/krunner/krunner_ollie.so
	rm -f /usr/lib64/qt6/plugins/ktexteditor/ollie_kate.so
	rm -rf /usr/lib64/qt6/qml/org/ollie
	kpackagetool6 -g -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true
	rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
	rm -f /usr/local/bin/ollie-ask /usr/local/bin/ollie-session-here
	ldconfig
	kquitapp6 krunner 2>/dev/null; true
	@echo "=== Uninstall complete ==="

# --- Individual component installs ---

krunner-install:
	mkdir -p /usr/lib64/qt6/plugins/kf6/krunner
	install -m755 $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \
		/usr/lib64/qt6/plugins/kf6/krunner/
	kquitapp6 krunner 2>/dev/null; true
	@echo "KRunner plugin installed. Restart krunner or re-login."

dolphin-install:
	mkdir -p ~/.local/share/kio/servicemenus
	rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
	install -m755 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/
	install -m755 dolphin/ollie-ask /usr/local/bin/
	install -m755 dolphin/ollie-session-here /usr/local/bin/
	@echo "Dolphin menus installed. Restart Dolphin or re-open context menu."

plasmoid-install:
	kpackagetool6 -g -t Plasma/Applet -u plasmoid/ 2>/dev/null || \
		kpackagetool6 -g -t Plasma/Applet -i plasmoid/
	mkdir -p /usr/lib64/qt6/qml/org/ollie/private
	install -m755 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \
		/usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so
	install -m644 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \
		/usr/lib64/qt6/qml/org/ollie/private/
	install -m755 $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/
	printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \
		tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null
	ldconfig
	@echo "Plasmoid installed. Restart plasmashell or add widget."

plasmoid-uninstall:
	kpackagetool6 -g -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true
	rm -rf /usr/lib64/qt6/qml/org/ollie
	rm -f /usr/lib64/libollie-plasmoid-plugin.so
	ldconfig
	@echo "Plasmoid uninstalled."

# --- KF5 Install ---

kf5-install:
	@echo "=== Installing ollie-kde (KF5) ==="
	# Binaries
	install -m755 $(KF5_BUILD_DIR)/ollie-tray /usr/bin/
	install -m755 $(KF5_BUILD_DIR)/ollie-gui /usr/bin/
	# Desktop file and icon
	mkdir -p /usr/share/applications
	install -m644 gui/org.ollie.gui.desktop /usr/share/applications/
	mkdir -p /usr/share/icons/hicolor/scalable/apps
	install -m644 gui/ollie.svg /usr/share/icons/hicolor/scalable/apps/ollie.svg
	# KRunner plugin
	mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner
	install -m755 $(KF5_BUILD_DIR)/lib/krunner_ollie.so \
		/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner/
	# Kate plugin
	mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor
	install -m755 $(KF5_BUILD_DIR)/lib/ollie_kate.so \
		/usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/
	# Plasmoid QML plugin
	mkdir -p /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private
	install -m755 $(KF5_BUILD_DIR)/lib/libollieprivateplugin.so \
		/usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/
	install -m644 plasmoid/plugin/qmldir \
		/usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/
	# Plasmoid package (direct install — kpackagetool5 -u doesn't overwrite)
	mkdir -p /usr/share/plasma/plasmoids/org.ollie.plasmoid/contents/ui
	cp plasmoid/metadata-kf5.json /usr/share/plasma/plasmoids/org.ollie.plasmoid/metadata.json
	cp plasmoid/contents/ui/main-kf5.qml /usr/share/plasma/plasmoids/org.ollie.plasmoid/contents/ui/main.qml
	rm -f /usr/share/plasma/plasmoids/org.ollie.plasmoid/contents/ui/main-kf5.qml
	# Dolphin service menus + helper scripts
	mkdir -p ~/.local/share/kio/servicemenus
	rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
	install -m755 dolphin/ollie-actions-kf5.desktop ~/.local/share/kio/servicemenus/ollie-actions.desktop
	install -m755 dolphin/ollie-ask /usr/local/bin/
	install -m755 dolphin/ollie-session-here /usr/local/bin/
	# Finalize
	ldconfig
	kquitapp5 krunner 2>/dev/null; true
	@echo ""
	@echo "=== Installation complete (KF5) ==="
	@echo "Restart Kate, KRunner, and plasmashell to pick up plugins."

kf5-uninstall:
	@echo "=== Uninstalling ollie-kde (KF5) ==="
	rm -f /usr/bin/ollie-tray
	rm -f /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner/krunner_ollie.so
	rm -f /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/ollie_kate.so
	rm -rf /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie
	kpackagetool5 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true
	rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
	rm -f /usr/local/bin/ollie-ask /usr/local/bin/ollie-session-here
	ldconfig
	kquitapp5 krunner 2>/dev/null; true
	@echo "=== Uninstall complete (KF5) ==="

# --- Data (prompts, skills, tools) ---

data:
	@echo "=== Installing kde data ==="
	mkdir -p $(HOME)/.config/ollie/skills
	mkdir -p $(HOME)/.config/ollie/tools
	rm -rf $(HOME)/.config/ollie/prompts
	mkdir -p $(HOME)/.config/ollie/prompts
	cp -rf prompts/* $(HOME)/.config/ollie/prompts
	cp -rf skills/* $(HOME)/.config/ollie/skills
	cp -rf tools/_lib $(HOME)/.config/ollie/tools/_lib
	cp -rf tools/* $(HOME)/.config/ollie/tools

# --- GUI Tools (standalone install) ---

GUI_TOOLS := gui_accessibility gui_activities gui_apps gui_brightness \
             gui_clipboard gui_files gui_input gui_notify \
             gui_screenshot gui_shortcuts gui_windows

tools-install:
	@echo "=== Installing GUI automation tools ==="
	mkdir -p $(HOME)/.config/ollie/tools
	@for t in $(GUI_TOOLS); do \
		install -m755 tools/$$t $(HOME)/.config/ollie/tools/$$t; \
		echo "  installed: $$t"; \
	done
	@echo "=== Done. Tools available in next ollie session. ==="

tools-uninstall:
	@echo "=== Removing GUI automation tools ==="
	@for t in $(GUI_TOOLS); do \
		rm -f $(HOME)/.config/ollie/tools/$$t; \
		echo "  removed: $$t"; \
	done
	@echo "=== Done ==="

# --- Development helpers ---

tray: build
	./$(BUILD_DIR)/ollie-tray

clean:
	rm -rf $(BUILD_DIR) $(KF5_BUILD_DIR)
