#!/usr/bin/env bash

# Install Panama's searchable launcher actions as one narrow directory link.
# Keeping the runtime path stable lets Vicinae watch it while every command
# remains authored and reviewed in the Panama repository.

set -euo pipefail

panama_path="${PANAMA_PATH:-$HOME/.local/share/Panama}"
vicinae_data_dir="${VICINAE_DATA_DIR:-$HOME/.local/share/vicinae}"
source_dir="$panama_path/config/local/share/vicinae/scripts"
scripts_dir="$vicinae_data_dir/scripts"
target_dir="$scripts_dir/panama"
backup_root="$vicinae_data_dir/backups"
backup_dir="$backup_root/panama.pre-panama"
legacy_backup="$scripts_dir/panama.pre-panama"

[[ -d "$source_dir" ]] || {
    printf 'Panama command source is missing: %s\n' "$source_dir" >&2
    exit 1
}

mkdir -p "$scripts_dir" "$backup_root"

# Older Panama builds preserved this directory alongside searchable commands.
# Move it out before reloading so those scripts cannot appear twice.
if [[ -e "$legacy_backup" ]]; then
    if [[ -e "$backup_dir" ]]; then
        printf 'Refusing to move %s; backup already exists at %s\n' \
            "$legacy_backup" "$backup_dir" >&2
        exit 1
    fi
    mv "$legacy_backup" "$backup_dir"
fi

if [[ -L "$target_dir" ]]; then
    rm "$target_dir"
elif [[ -e "$target_dir" ]]; then
    if [[ -e "$backup_dir" ]]; then
        printf 'Refusing to replace %s; backup already exists at %s\n' \
            "$target_dir" "$backup_dir" >&2
        exit 1
    fi
    mv "$target_dir" "$backup_dir"
fi

ln -s "$source_dir" "$target_dir"

# The server also rescans periodically, but an explicit reload makes a setup
# run deterministic. If Vicinae is not active yet, its startup scan is enough.
if command -v vicinae >/dev/null 2>&1 && vicinae ping >/dev/null 2>&1; then
    vicinae cmd launch core:reload-scripts >/dev/null 2>&1 || true
fi
