#!/usr/bin/env bash
# ssh-pick — выбрать SSH-хост через fzf

set -euo pipefail

SSH_CONFIG_DIR="${HOME}/.ssh/config.d"
SSH_CONFIG="${HOME}/.ssh/config"

_list_hosts() {
    local configs=()

    if [[ -d "$SSH_CONFIG_DIR" ]]; then
        configs=("$SSH_CONFIG_DIR"/*.conf)
    fi
    [[ -f "$SSH_CONFIG" ]] && configs+=("$SSH_CONFIG")

    for f in "${configs[@]}"; do
        [[ -f "$f" ]] || continue
        awk '/^Host [^*]/{
            sub(/^Host /, "")
            n = split($0, hosts, " ")
            for (i = 1; i <= n; i++) print hosts[i]
        }' "$f"
    done | sort -u
}

main() {
    if ! command -v fzf &>/dev/null; then
        echo "fzf not found"
        exit 1
    fi

    local hosts
    hosts=$(_list_hosts)

    if [[ -z "$hosts" ]]; then
        echo "No SSH hosts found"
        exit 1
    fi

    local selected
    selected=$(echo "$hosts" | fzf \
        --prompt "ssh > " \
        --header "Enter — подключиться | Ctrl-C — выйти" \
        --height=40% \
        --reverse) || exit 0

    echo "▶ ssh $selected"
    exec ssh "$selected"
}

main "$@"
