#!/usr/bin/env bash
set -euo pipefail

# Each entry: PATH|minDepth|maxDepth
SEARCH_SPECS=(
  "$HOME/src/github|2|2"     # username/repo
  "$HOME/src/aur|1|1"        # AUR pkgs
  "$HOME/.config|0|1"        # each folder in ~/.config
  "$HOME/.local/bin|0|0"
)

# Optional: override via env, e.g.
# SESSIONIZER_SPECS="$HOME/work|1|2,$HOME/projects|2|2"
IFS=',' read -r -a _OVERRIDE <<< "${SESSIONIZER_SPECS:-}"
if [[ ${#_OVERRIDE[@]} -gt 0 && -n ${_OVERRIDE[0]} ]]; then
  SEARCH_SPECS=("${_OVERRIDE[@]}")
fi
unset _OVERRIDE

collect() {
  local path min max
  for spec in "${SEARCH_SPECS[@]}"; do
    IFS='|' read -r path min max <<<"$spec"
    [[ -d $path ]] || continue
    find "$path" -mindepth "$min" -maxdepth "$max" -type d 2>/dev/null
  done
}

if [[ $# -eq 1 ]]; then
  selected=$1
else
  if command -v fd >/dev/null 2>&1; then
    mapfile -t CANDIDATES < <(collect | sort -u)
    selected=$(printf '%s\n' "${CANDIDATES[@]}" | fzf)
  else
    selected=$(collect | sort -u | fzf)
  fi
fi

[[ -z ${selected:-} ]] && exit 0

selected_name=$(basename "$selected" | tr -c '[:alnum:]' '_' | sed 's/^_*$/'"sess_$(date +%s)"'/' | sed 's/_$//')
tmux_running=$(pgrep tmux || true)

if [[ -z ${TMUX:-} ]] && [[ -z $tmux_running ]]; then
  exec tmux new-session -s "$selected_name" -c "$selected"
fi

if ! tmux has-session -t="$selected_name" 2>/dev/null; then
  tmux new-session -ds "$selected_name" -c "$selected"
  tmux rename-window -t "$selected_name:" "shell"
  # tmux new-window -t "$selected_name:" -c "$selected" -n "neovim"
  # tmux send-keys -t "$selected_name:neovim" "nvim" Enter
  tmux select-window -t "$selected_name:shell"
fi

if [[ -z ${TMUX:-} ]]; then
  tmux attach -t "$selected_name"
else
  tmux switch-client -t "$selected_name"
fi
i
