#!/usr/bin/env bash

. lib.bash || exit

prefix="$HOME/.ssh/S."

parse_socket() {
	addr="${socket#$prefix}"
	user="${addr%@*}"
	temp="${addr##*@}"
	host="${temp%:*}"
	port="${temp##*:}"
}

ssh_control() {
	ssh "$host" -l "$user" -p "$port" -S "$socket" "$@"
}

do_list() {
	printf '%-40s%s\n' "SERVER NAME" "STATUS"
	for socket in "$prefix"*; do
		test -S "$socket" || continue
		parse_socket
		if ! status=$(ssh_control -O check 2>&1); then
			status="${status/#Control socket connect(*): /Control socket: }"
		fi
		printf '%-40s%s\n' "$addr" "$status"
	done
}

do_kill() {
	for socket in "$prefix"*; do
		test -S "$socket" || continue
		parse_socket
		lib:echo "Stopping socket for '$addr'"
		ssh_control -O ${1:-stop} || rm -v "$socket"
	done
}

do_connect() {
	lib:echo "Starting background connection to '$*'"
	ssh -fNM "$@"
}

case $1 in
    -k) do_kill 'stop';;
    -K) do_kill 'exit';;
    '') do_list;;
    *)  do_connect "$@";;
esac
