# Ollie monorepo build system
#
# Two paths:
#   just         (default) 9P frontend: core, 9p, acme, httpgw, webui + install
#   just dbus    D-Bus frontend: core, dbus (ollied), kde, httpgw, webui + install
#
# Build and install are separate phases. No sudo.

set dotenv-load := false

home := env_var('HOME')
cfg := home / ".config/ollie"
bin := home / "bin"

# === Default (9P) path ===
default: build-9p install-9p

# === D-Bus path ===
dbus: build-dbus install-dbus

# === Build targets ===

build-9p: core ninep acme httpgw webui kde

build-dbus: core dbus-bin kde httpgw webui

core:
    @echo === Building ollie-core ===
    cd core && go build ./...

ninep:
    @echo === Building ollie-9p ===
    cd 9p && go build -buildvcs=false -o {{bin}}/olliesrv .
    cd 9p && go build -buildvcs=false -o {{bin}}/ollie-9p-mount ./cmd/ollie-9p-mount/

dbus-bin:
    @echo === Building ollie-dbus (ollied) ===
    cd dbus && go build -o ollied .

acme:
    @echo === Building ollie-acme ===
    cd acme && go build -o {{bin}}/Ollie .
    install -m755 acme/scripts/Kmpl {{bin}}/Kmpl
    install -m755 acme/scripts/Oi {{bin}}/Oi
    install -m755 acme/scripts/Theo {{bin}}/Theo

httpgw:
    @echo === Building ollie-httpgw ===
    cd httpgw && go build -o {{bin}}/ollie-httpgw .

webui:
    @echo === Building ollie-webui ===
    cd webui && npm run build

kde:
    @echo === Building kde tools ===
    cd kde && cmake -B build-cmake -S . -DCMAKE_INSTALL_PREFIX=~/.local
    cd kde && cmake --build build-cmake -j$(nproc)

# === Install targets ===

install-9p: test install-data install-scripts install-contrib install-kde install-el
    install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
    install -m644 prompts/session-9p.md {{cfg}}/prompts/session.md
    mkdir -p ~/.config/autostart
    install -m644 9p/org.ollie.olliesrv.desktop ~/.config/autostart/
    @echo === Install complete \(9P\) ===
    @echo 'Restart Plasma to pick up KDE plugins.'

install-dbus: test install-data install-scripts install-contrib install-dbus-bin install-kde
    install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
    install -m644 prompts/session-dbus.md {{cfg}}/prompts/session.md
    @echo === Install complete \(D-Bus\) ===
    @echo 'Restart Plasma to pick up KDE plugins.'

install-dbus-bin:
    @echo === Installing ollied ===
    mkdir -p ~/.local/bin
    install -m755 dbus/ollied ~/.local/bin/
    mkdir -p ~/.config/autostart
    install -m644 dbus/org.ollie.SessionManager.desktop ~/.config/autostart/

install-kde:
    @echo === Installing ollie-kde \(KF6\) ===
    cmake --install kde/build-cmake
    # Desktop file and icon
    mkdir -p ~/.local/share/applications
    install -m644 kde/gui/org.ollie.gui.desktop ~/.local/share/applications/
    mkdir -p ~/.local/share/icons/hicolor/scalable/apps
    install -m644 kde/gui/ollie.svg ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
    # Dolphin service menus + helper scripts
    mkdir -p ~/.local/share/kio/servicemenus
    install -m755 kde/dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/
    install -m755 kde/dolphin/ollie-ask ~/.local/bin/
    install -m755 kde/dolphin/ollie-session-here ~/.local/bin/
    # Plasma session environment
    mkdir -p ~/.config/plasma-workspace/env
    install -m755 kde/99-ollie.sh ~/.config/plasma-workspace/env/99-ollie.sh
    # Finalize
    kbuildsycoca6 --noincremental 2>/dev/null; true
    kquitapp6 krunner 2>/dev/null; true
    @echo === KDE install complete. Restart Plasma to pick up plugins. ===

install-el:
    @echo === Installing ellie.el ===
    mkdir -p ~/.config/emacs/ellie
    install -m644 el/ellie.el ~/.config/emacs/ellie/ellie.el

install-data:
    @echo === Installing data ===
    # Agents
    mkdir -p {{cfg}}/agents
    install -m644 agents/copilot.json {{cfg}}/agents/copilot.json
    install -m644 agents/default.json {{cfg}}/agents/default.json
    install -m644 agents/explorer.json {{cfg}}/agents/explorer.json
    install -m644 agents/librarian.json {{cfg}}/agents/librarian.json
    install -m644 agents/partner.json {{cfg}}/agents/partner.json
    install -m644 agents/README.md {{cfg}}/agents/README.md
    install -m644 agents/taskmanager.json {{cfg}}/agents/taskmanager.json
    install -m644 agents/theo.json {{cfg}}/agents/theo.json
    # Prompts
    mkdir -p {{cfg}}/prompts
    mkdir -p {{cfg}}/memory
    install -m644 prompts/agent-coding.md {{cfg}}/prompts/agent-coding.md
    install -m644 prompts/agent-copilot.md {{cfg}}/prompts/agent-copilot.md
    install -m644 prompts/agent-explorer.md {{cfg}}/prompts/agent-explorer.md
    install -m644 prompts/agent-librarian.md {{cfg}}/prompts/agent-librarian.md
    install -m644 prompts/agent-partner.md {{cfg}}/prompts/agent-partner.md
    install -m644 prompts/agent-taskmanager.md {{cfg}}/prompts/agent-taskmanager.md
    install -m644 prompts/agent-theo.md {{cfg}}/prompts/agent-theo.md
    install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
    install -m644 prompts/SYSTEM_PROMPT_DEVSTRAL.md {{cfg}}/prompts/SYSTEM_PROMPT_DEVSTRAL.md
    install -m644 prompts/SYSTEM_PROMPT_QWEN.md {{cfg}}/prompts/SYSTEM_PROMPT_QWEN.md
    install -m644 prompts/session-9p.md {{cfg}}/prompts/session-9p.md
    install -m644 prompts/session-dbus.md {{cfg}}/prompts/session-dbus.md
    install -m644 prompts/tools-elevate.md {{cfg}}/prompts/tools-elevate.md
    install -m644 prompts/tools-file.md {{cfg}}/prompts/tools-file.md
    install -m644 prompts/tools-image.md {{cfg}}/prompts/tools-image.md
    install -m644 prompts/tools-lsp.md {{cfg}}/prompts/tools-lsp.md
    install -m644 prompts/tools-memory.md {{cfg}}/prompts/tools-memory.md
    install -m644 prompts/tools-process.md {{cfg}}/prompts/tools-process.md
    install -m644 prompts/tools-reasoning.md {{cfg}}/prompts/tools-reasoning.md
    install -m644 prompts/tools-subagent.md {{cfg}}/prompts/tools-subagent.md
    # Sandbox
    mkdir -p {{cfg}}/sandbox
    install -m644 sandbox/default.yaml {{cfg}}/sandbox/default.yaml
    install -m644 sandbox/restricted.yaml {{cfg}}/sandbox/restricted.yaml
    # Skills
    mkdir -p {{cfg}}/skills/acme-api {{cfg}}/skills/agent-kb {{cfg}}/skills/denote \
        {{cfg}}/skills/duckduckgo-search {{cfg}}/skills/github-cli {{cfg}}/skills/rc-shell \
        {{cfg}}/skills/web-dev-browser-screencapture {{cfg}}/skills/write-skills
    install -m644 skills/LICENSE.md {{cfg}}/skills/LICENSE.md
    install -m644 skills/README.md {{cfg}}/skills/README.md
    install -m644 skills/acme-api/SKILL.md {{cfg}}/skills/acme-api/SKILL.md
    install -m644 skills/agent-kb/SKILL.md {{cfg}}/skills/agent-kb/SKILL.md
    install -m644 skills/denote/SKILL.md {{cfg}}/skills/denote/SKILL.md
    install -m644 skills/duckduckgo-search/SKILL.md {{cfg}}/skills/duckduckgo-search/SKILL.md
    install -m644 skills/github-cli/SKILL.md {{cfg}}/skills/github-cli/SKILL.md
    install -m644 skills/rc-shell/SKILL.md {{cfg}}/skills/rc-shell/SKILL.md
    install -m644 skills/web-dev-browser-screencapture/SKILL.md {{cfg}}/skills/web-dev-browser-screencapture/SKILL.md
    install -m644 skills/write-skills/SKILL.md {{cfg}}/skills/write-skills/SKILL.md
    # Tools (executables)
    mkdir -p {{cfg}}/tools/_lib/lsp/adapters
    install -m755 tools/browser_screencap {{cfg}}/tools/browser_screencap
    install -m755 tools/denote_view {{cfg}}/tools/denote_view
    install -m755 tools/env {{cfg}}/tools/env
    install -m755 tools/file_edit {{cfg}}/tools/file_edit
    install -m755 tools/file_glob {{cfg}}/tools/file_glob
    install -m755 tools/file_grep {{cfg}}/tools/file_grep
    install -m755 tools/file_read {{cfg}}/tools/file_read
    install -m755 tools/file_write {{cfg}}/tools/file_write
    install -m755 tools/grep {{cfg}}/tools/grep
    install -m755 tools/gui_accessibility {{cfg}}/tools/gui_accessibility
    install -m755 tools/gui_activities {{cfg}}/tools/gui_activities
    install -m755 tools/gui_apps {{cfg}}/tools/gui_apps
    install -m755 tools/gui_brightness {{cfg}}/tools/gui_brightness
    install -m755 tools/gui_clipboard {{cfg}}/tools/gui_clipboard
    install -m755 tools/gui_files {{cfg}}/tools/gui_files
    install -m755 tools/gui_input {{cfg}}/tools/gui_input
    install -m755 tools/gui_media {{cfg}}/tools/gui_media
    install -m755 tools/gui_notify {{cfg}}/tools/gui_notify
    install -m755 tools/gui_screenshot {{cfg}}/tools/gui_screenshot
    install -m755 tools/gui_shortcuts {{cfg}}/tools/gui_shortcuts
    install -m755 tools/gui_windows {{cfg}}/tools/gui_windows
    install -m755 tools/image_read {{cfg}}/tools/image_read
    install -m755 tools/lsp_completion {{cfg}}/tools/lsp_completion
    install -m755 tools/lsp_definition {{cfg}}/tools/lsp_definition
    install -m755 tools/lsp_diagnostics {{cfg}}/tools/lsp_diagnostics
    install -m755 tools/lsp_hover {{cfg}}/tools/lsp_hover
    install -m755 tools/lsp_references {{cfg}}/tools/lsp_references
    install -m755 tools/lsp_rename {{cfg}}/tools/lsp_rename
    install -m755 tools/lsp_symbols {{cfg}}/tools/lsp_symbols
    install -m755 tools/memory_recall {{cfg}}/tools/memory_recall
    install -m755 tools/memory_remember {{cfg}}/tools/memory_remember
    install -m755 tools/process_dismiss {{cfg}}/tools/process_dismiss
    install -m755 tools/process_list {{cfg}}/tools/process_list
    install -m755 tools/process_output {{cfg}}/tools/process_output
    install -m755 tools/process_signal {{cfg}}/tools/process_signal
    install -m755 tools/reasoning_think {{cfg}}/tools/reasoning_think
    install -m755 tools/route {{cfg}}/tools/route
    install -m755 tools/subagent_generate {{cfg}}/tools/subagent_generate
    install -m755 tools/subagent_spawn {{cfg}}/tools/subagent_spawn
    # Tools (library modules)
    install -m644 tools/_lib/__init__.py {{cfg}}/tools/_lib/__init__.py
    install -m644 tools/_lib/lsp/__init__.py {{cfg}}/tools/_lib/lsp/__init__.py
    install -m644 tools/_lib/lsp/bridge.py {{cfg}}/tools/_lib/lsp/bridge.py
    install -m644 tools/_lib/lsp/client.py {{cfg}}/tools/_lib/lsp/client.py
    install -m644 tools/_lib/lsp/workspace.py {{cfg}}/tools/_lib/lsp/workspace.py
    install -m644 tools/_lib/lsp/adapters/__init__.py {{cfg}}/tools/_lib/lsp/adapters/__init__.py
    install -m644 tools/_lib/lsp/adapters/clangd.py {{cfg}}/tools/_lib/lsp/adapters/clangd.py
    install -m644 tools/_lib/lsp/adapters/gopls.py {{cfg}}/tools/_lib/lsp/adapters/gopls.py
    install -m644 tools/_lib/lsp/adapters/intelephense.py {{cfg}}/tools/_lib/lsp/adapters/intelephense.py
    # Help
    install -m644 doc/help.md {{cfg}}/help.md

install-scripts:
    @echo === Installing scripts ===
    mkdir -p {{cfg}}/scripts/s {{cfg}}/scripts/u {{cfg}}/scripts/x
    install -m755 scripts/s/sh      {{cfg}}/scripts/s/sh
    install -m755 scripts/s/ls      {{cfg}}/scripts/s/ls
    install -m755 scripts/s/kill    {{cfg}}/scripts/s/kill
    install -m755 scripts/s/b       {{cfg}}/scripts/s/b
    install -m755 scripts/s/bfg     {{cfg}}/scripts/s/bfg
    install -m755 scripts/s/bbg     {{cfg}}/scripts/s/bbg
    install -m755 scripts/s/cleanup {{cfg}}/scripts/s/cleanup
    install -m755 scripts/u/optimize  {{cfg}}/scripts/u/optimize
    install -m755 scripts/u/complete  {{cfg}}/scripts/u/complete
    install -m755 scripts/u/cascade   {{cfg}}/scripts/u/cascade
    install -m755 scripts/x/elevate {{cfg}}/scripts/x/elevate
    install -m755 scripts/x/elevate-adapter-superpowerd {{cfg}}/scripts/x/elevate-adapter-superpowerd
    install -m755 scripts/x/elevate-adapter-start {{cfg}}/scripts/x/elevate-adapter-start
    install -m755 scripts/x/bd     {{cfg}}/scripts/x/bd
    install -m755 scripts/x/prime  {{cfg}}/scripts/x/prime
    install -m755 scripts/x/freeloader {{cfg}}/scripts/x/freeloader

install-contrib:
    @echo === Installing contrib scripts ===
    mkdir -p {{bin}}
    install -m755 contrib/ollie-remount {{bin}}/ollie-remount
    install -m755 scripts/s/ollie-watchdog {{bin}}/ollie-watchdog

# === Uninstall ===

uninstall:
    @echo === Uninstalling ollie ===
    rm -f {{bin}}/olliesrv {{bin}}/ollie-9p-mount
    rm -f {{bin}}/ollie-httpgw
    rm -f {{bin}}/Ollie {{bin}}/Kmpl {{bin}}/Oi {{bin}}/Theo
    rm -f {{bin}}/ollie-remount {{bin}}/ollie-watchdog
    rm -rf {{cfg}}
    rm -f ~/.config/autostart/org.ollie.olliesrv.desktop
    # D-Bus daemon
    pkill -u "$(id -u)" -x ollied 2>/dev/null; true
    rm -f ~/.local/bin/ollied
    rm -f ~/.config/autostart/org.ollie.SessionManager.desktop
    # KDE
    rm -f ~/.local/bin/ollie-tray ~/.local/bin/ollie-gui
    rm -f ~/.local/bin/ollie-ask ~/.local/bin/ollie-session-here
    rm -f ~/.local/share/applications/org.ollie.gui.desktop
    rm -f ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
    rm -f ~/.local/lib64/qt6/plugins/kf6/krunner/krunner_ollie.so
    rm -f ~/.local/lib64/qt6/plugins/ktexteditor/ollie_kate.so
    rm -rf ~/.local/share/plasma/plasmoids/org.ollie.plasmoid
    rm -rf ~/.local/lib64/qml/org/ollie
    rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
    kquitapp6 krunner 2>/dev/null; true
    # Emacs
    rm -rf ~/.config/emacs/ellie
    # Plasma env
    rm -f ~/.config/plasma-workspace/env/99-ollie.sh
    @echo === Uninstall complete ===

# === Test targets ===

test: test-core test-9p

test-core:
    @echo === Testing ollie-core ===
    cd core && go test ./...

test-9p:
    @echo === Testing ollie-9p ===
    cd 9p && go test ./...

# === Clean ===

clean:
    cd core && go clean ./... 2>/dev/null || true
    rm -f {{bin}}/olliesrv {{bin}}/ollie-9p-mount
    rm -f {{bin}}/ollie-httpgw
    rm -f {{bin}}/Ollie {{bin}}/Kmpl {{bin}}/Oi {{bin}}/Theo
    rm -f dbus/ollied
    rm -rf kde/build-cmake

# === Help ===

help:
    @echo 'Ollie monorepo build targets:'
    @echo '  just           Build 9P path + install (default)'
    @echo '  just dbus      Build D-Bus path + install'
    @echo '  just build-9p  Build only (9P): core, 9p, acme, httpgw, webui'
    @echo '  just build-dbus Build only (D-Bus): core, ollied, kde, httpgw, webui'
    @echo '  just install-9p   Install with 9P prompt'
    @echo '  just install-dbus Install with D-Bus prompt'
    @echo '  just test      Run all tests (core + 9p)'
    @echo '  just test-core Run core tests'
    @echo '  just test-9p   Run 9p tests'
    @echo '  just uninstall Remove all installed files'
    @echo '  just clean     Clean build artifacts'
    @echo ''
    @echo 'Individual: just core | ninep | dbus-bin | acme | httpgw | webui | kde'