#!/usr/bin/env bash

# use fzf to fuzzy select a tmux session or create one

switcher() {
  if [[ -n $TMUX ]]; then
    change="switch-client"
  else
    change="attach-session -d"
  fi

  # shellcheck disable=SC2016
  picker='
  set item (echo {} | cut -f 1 -d " ")
  if test -z (d {} -k) 2>/dev/null
    d "$item"
  else
    d {}
  end
  '

  mapfile -t sessions < <(tmux list-sessions -F "#{session_name}")

  if (( ${#sessions[@]} == 1 )); then
    session="${sessions[0]}"

  else
    session="$(
      tmux list-sessions -F "#{session_name}" 2>/dev/null \
        | fzf --exit-0 \
          --height 40 \
          --print-query \
          --preview "$picker" \
          --preview-window up:60% \
        | tail -n 1
    )"
  fi
  [[ -n $session ]] || exit 0

  if ! tmux has-session "$session" 2>/dev/null; then
    tmux new-session -d -s "$session" -c "$HOME"
  fi

  # shellcheck disable=SC2086
  tmux $change -t "$session"

  _set_context
}

if tmux ls >/dev/null 2>&1; then
  # tmux server is running
  switcher

else
  # tmux server not running
  tmux new -s main -c "$HOME"
fi
