#!/bin/bash

not_in_tmux() {
  [ -z "$TMUX" ]
}

DIR="$1"

# If no arguments are passed in, try to immediately attach or start without further input
echo "$DIR"
if [ -z "$DIR" ]; then
  if not_in_tmux; then
    tmux attach && exit 1 || DIR="--start"
  else
    exit 1
  fi
fi

# If --start was passed in, immediately start a new session based on the current directory
if [ "$DIR" = "--start" ]; then
  echo "Starting"
  path_name="$(basename "$PWD" | tr . -)"
  session_name="${path_name//./_}"
else
  # Ask the user which directory to start in
  _session_name=$(cd "$DIR" && find -L . -maxdepth 1 -type d -printf "%f\n" | sed "s|/||g" | fzf --reverse --header="Select project from $(basename "$DIR") ")
  session_name="${_session_name//./_}"
  path_name="$DIR/$_session_name"
fi

echo "Session name is \"$session_name\""
echo "Path name is \"$path_name\""

if [ -z "$session_name" ]; then
  # Operation cancelled by user
  exit 1
fi

session_exists() {
  # Check if the $session_name exists
  tmux has-session -t "=$session_name"
}

create_detached_session() {
  if [ "$DIR" = "--start" ]; then
    (TMUX='' 
    tmux new-session -Ad -s "$session_name" -c "$path_name"
    )
  else
    (TMUX=''
    tmux new-session -Ad -s "$session_name" -c "$path_name"
    # tmux split-window -vb -t "$session_name" -c "$path_name" -p 70
    tmux send-keys -t "$session_name" "nvim '+Telescope find_files'" Enter
    )
  fi
}

create_if_needed_and_attach() {
  if not_in_tmux; then
    tmux new-session -As "$session_name" -c "$path_name"
  else
    if ! session_exists; then
      create_detached_session
    fi
    tmux switch-client -t "$session_name"
  fi
}

attach_to_first_session() {
  first_session_name=$(tmux list-sessions -F "#{session_name}" | head -n 1)
  if [ -n "$first_session_name" ]; then
    tmux attach -t "$first_session_name"
    tmux choose-tree -Za
  fi
}

create_if_needed_and_attach || attach_to_first_session
