# gleamtk POC — Relm4 foreign node + Gleam controller

cookie := "gleamtk"
ui_node := "ui@127.0.0.1"
gleam_node := "gleamtk@127.0.0.1"

# Build the Relm4 foreign node
build-ui:
    cd ui && cargo build

# Build the Gleam controller
build-gleam:
    cd gleam && gleam build

# Start epmd if needed, then the UI foreign node
ui: build-ui
    #!/usr/bin/env bash
    set -euo pipefail
    if ! pgrep -x epmd >/dev/null 2>&1; then
      echo "starting epmd…"
      epmd -daemon
      sleep 0.3
    fi
    # Prefer nix-shell GTK schema paths when present
    if command -v pkg-config >/dev/null 2>&1; then
      _gtk="$(pkg-config --variable=prefix gtk4 2>/dev/null || true)"
      if [[ -n "${_gtk}" ]]; then
        export GSETTINGS_SCHEMAS_PATH="${_gtk}/share/gsettings-schemas/$(basename "$(echo ${_gtk}/share/gsettings-schemas/*gtk* 2>/dev/null | awk '{print $1}')"):${GSETTINGS_SCHEMAS_PATH:-}"
        export XDG_DATA_DIRS="${_gtk}/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
      fi
    fi
    exec ./ui/target/debug/gleamtk-ui \
      --local {{ui_node}} \
      --cookie {{cookie}} \
      --register gui

# Start the Gleam controller (connects to the UI node)
gleam: build-gleam
    #!/usr/bin/env bash
    set -euo pipefail
    if ! pgrep -x epmd >/dev/null 2>&1; then
      epmd -daemon
      sleep 0.3
    fi
    cd gleam
    export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}"
    exec gleam run -- {{ui_node}}

# Full demo: UI in background, then controller in foreground
run:
    #!/usr/bin/env bash
    set -euo pipefail
    if ! pgrep -x epmd >/dev/null 2>&1; then
      epmd -daemon
      sleep 0.3
    fi
    just build-ui
    just build-gleam
    ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} &
    UI_PID=$!
    trap 'kill $UI_PID 2>/dev/null || true' EXIT
    sleep 1
    cd gleam
    export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}"
    gleam run -- {{ui_node}}

# Typecheck / compile only
check: build-ui build-gleam

# Headless distribution smoke (escript ↔ foreign node)
smoke: build-ui
    #!/usr/bin/env bash
    set -euo pipefail
    if ! pgrep -x epmd >/dev/null 2>&1; then
      epmd -daemon
      sleep 0.3
    fi
    if pidof gleamtk-ui >/dev/null 2>&1; then
      kill "$(pidof gleamtk-ui)" || true
      sleep 0.3
    fi
    ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} >/tmp/gleamtk-ui.log 2>&1 &
    UI_PID=$!
    trap 'kill $UI_PID 2>/dev/null || true' EXIT
    sleep 1.5
    escript scripts/smoke_dist.escript
