#!/usr/bin/env bash
set -euo pipefail
# POS: entertainment send — Run a public-API plugin and send its output via the configured notify platforms
# POS_FLAGS: --print --markdown

source "$(dirname "$0")/../lib/common.sh" 2>/dev/null || source "$(dirname "$0")/common.sh"
source "$(dirname "$0")/../lib/entertainment-lib.sh" 2>/dev/null || source "$(dirname "$0")/entertainment-lib.sh"
source "$(dirname "$0")/../lib/notify.sh" 2>/dev/null || source "$(dirname "$0")/notify.sh"

usage() {
    local dir plugins
    dir="$(ent_plugin_dir 2>/dev/null)" || dir=""
    if [ -n "$dir" ]; then
        plugins="$(list_plugins "$dir" | sed 's/^/  /')"
    else
        plugins="  (plugin directory not found — set ENTERTAINMENT_DIR)"
    fi
    cat <<EOF
Usage: pos entertainment send <plugin> [--print] [--markdown] [plugin args...]

Run an entertainment plugin, capture its output, and send it via the configured
notify platforms (NOTIFY_PLATFORM, default Telegram).

Plugins are scripts that fetch a public API and print the message to stdout —
that stdout is what gets sent.

Modes:
  (default)     Send the plugin output via notify_send (silent)
  --print       Print the output locally instead of sending
  --markdown    Send with Markdown parse_mode (via the notify senders)

Available plugins:
$plugins

Environment:
  ENTERTAINMENT_DIR   Override the plugin directory

Config (per plugin): ~/.config/linux_post_install/entertainment.env

Examples:
  pos entertainment send weather
  pos entertainment send weather --print
  pos entertainment send joke --markdown
EOF
    exit 0
}

case "${1:-}" in
    -h|--help|"") usage ;;
esac

# ── Parse runner flags ──────────────────────────────────────────
PRINT=0
MARKDOWN=0
plugin_args=()
while [ $# -gt 0 ]; do
    case "$1" in
        --print)    PRINT=1; shift ;;
        --markdown) MARKDOWN=1; shift ;;
        -h|--help)  usage ;;
        *)          plugin_args+=("$1"); shift ;;
    esac
done

[ ${#plugin_args[@]} -ge 1 ] || usage
plugin="${plugin_args[0]}"
unset 'plugin_args[0]'

# ── Run the plugin ──────────────────────────────────────────────
dir="$(ent_plugin_dir)"
script="$(resolve_plugin "$dir" "$plugin")"

rc=0
output="$( "$script" "${plugin_args[@]}" )" || rc=$?
if [ "$rc" -ne 0 ]; then
    [ -n "${INVOCATION_ID:-}" ] && notify_send "⚠️ entertainment '$plugin' failed (exit $rc)"
    save_last_run "$plugin" "$rc" "$(printf '%s' "$output" | head -1)"
    err "Plugin '$plugin' failed (exit $rc)"
fi

[ -n "$output" ] || { warn "Plugin '$plugin' produced no output — nothing to send"; save_last_run "$plugin" 0 ""; exit 0; }

# ── Route the output ────────────────────────────────────────────
if [ "$PRINT" -eq 1 ]; then
    printf '%s\n' "$output"
    exit 0
fi

save_last_run "$plugin" 0 "$(printf '%s' "$output" | head -1)"

if [ "$MARKDOWN" -eq 1 ]; then
    notify_send --markdown "$output"
else
    notify_send "$output"
fi
