
#!/bin/bash

#
# git recent upgraded. lists unique commits to that branch. and the branch diff.
#
#  run it:
#     git recent-with-fzf-and-diff # or alias it
#  then within it
#     `ctrl-o` to show the diff of that branch against the origin/main (or origin/master) 
#     `enter` to git checkout that branch
#


branches_format="%(color:yellow)%(refname:short)%(color:reset)"
commits_format="%C(red bold)%h %C(bold blue)%an %C(bold green)%ad %Creset%s"

mainormaster() {
  (git branch --format '%(refname:short)' --sort=-committerdate --list master main; echo main) | head -n1 || echo main
}

stat_cmd="git diff --color=always --stat origin/$(mainormaster)...{}"
diffcommits_cmd="git log --date=human --color=always --format='$commits_format' --no-merges origin/$(mainormaster)..{1}"
diffbranch_cmd="git diff origin/$(mainormaster)...{} | delta"

# fzf basic inspiration:
# - https://github.com/junegunn/fzf/wiki/Examples#git, https://github.com/junegunn/fzf/wiki/Examples-(fish)#git
# Hardcore inspiration:
# - https://github.com/junegunn/fzf-git.sh


_browse_branches() {
  local preview_cmd="$diffcommits_cmd"  # Default preview: commit log

  git for-each-ref --color=always --sort=-authordate "refs/heads/" --format="$branches_format" \
    |  fzf-tmux  --ansi  -p80%,60%  -- \
        --layout=reverse --multi --height=90% --min-height=20  \
        --border-label-pos=2 --border-label '🌲 Branches' --border \
        --no-hscroll --no-multi \
        --preview-window='right,70%,border-left,border-rounded' --preview="$diffcommits_cmd" --preview-label="Commits unique to branch" \
        --header $'CTRL-O (show branch diff)\nENTER (checkout)\n' \
        --bind 'preview-scroll-up:preview-up+preview-up+preview-up' \
        --bind 'preview-scroll-down:preview-down+preview-down+preview-down' \
        --bind "ctrl-o:preview:$diffbranch_cmd" 
} 


chosen_branch="$(_browse_branches)"
if [[ -n "$chosen_branch" ]]; then
  echo git checkout "$chosen_branch"
  git checkout "$chosen_branch"
fi
