# -*- mode: sh; -*-
setopt hist_ignore_space
setopt inc_append_history_time
setopt transient_rprompt

WORDCHARS=${${WORDCHARS//[-.=]}//[\/]}

zmodload zsh/terminfo

bindkey '\e[3~' delete-char

bindkey '\C-hd' describe-key-briefly

dc () {
  if [[ -x ./docker-compose ]]
  then
    ./docker-compose "$@"
  else
    docker-compose "$@"
  fi
}
compdef '_dispatch docker-compose docker-compose' dc

backward-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle backward-word
}

forward-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle forward-word
}

backward-kill-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle backward-kill-word
}

kill-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle kill-word
}

zle -N backward-argument
zle -N forward-argument
zle -N kill-argument
zle -N backward-kill-argument
bindkey '\e^b' backward-argument
bindkey '\e^f' forward-argument
bindkey '\e^d' backward-kill-argument
bindkey '\e^k' kill-argument

sort=${commands[gsort]:-$commands[sort]}

ds () {
  du -hd1 "$@" | $sort -h
}

# returns the first ghq root, whereas $GHQ_ROOT returns all
hash -d p=$ghq_root[0]
hash -d go=${GOPATH:-$HOME/go}

zle -C hist-complete complete-word _generic
zstyle ':completion:hist-complete:*' completer _history
bindkey '\e ' hist-complete

zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*'
zstyle ':completion:*' completer _expand _complete _match

# General configuration

if [[ $TERM == "dumb" ]]
then
  PROMPT='%B%F{green}%n %F{blue}%~%b%f
%# '
  unsetopt zle
else
  AGKOZAK_USER_HOST_DISPLAY=${+SSH_CLIENT}
  AGKOZAK_SHOW_STASH=0
  AGKOZAK_SHOW_VIRTUALENV=0
  AGKOZAK_PROMPT_DIRTRIM=0
  AGKOZAK_LEFT_PROMPT_ONLY=${+SSH_CLIENT}

  if [[ -z $SSH_CLIENT ]]
  then
    check_kubectl_context () {
      if [[ "$PWD" =~ satoshipay ]]
      then
        kubectl_context=$(kubectl config current-context)
        kubectl_namespace=$(kubectl config view -o jsonpath="{.contexts[?(@.name==\"${kubectl_context}\")].context.namespace}")
        if [[ $kubectl_context =~ production ]]
        then
          kubectl_colour=red
          kubectl_release=satoshipay-${kubectl_namespace}
        else
          kubectl_colour=yellow
          if [[ -z $mr ]]
          then
            kubectl_release=satoshipay-${kubectl_namespace}-staging
          else
            kubectl_release=story-${mr}-${kubectl_namespace}
          fi
        fi
        prompt_context="%F{$kubectl_colour}[${kubectl_context}:${kubectl_namespace}]%f"
      else
        prompt_context=
      fi
    }
    precmd_functions+=(check_kubectl_context)
    AGKOZAK_CUSTOM_RPROMPT='${prompt_context}%(3V.%F{${AGKOZAK_COLORS_BRANCH_STATUS}%3v%f.)'
  fi
fi

export FZF_CTRL_T_COMMAND='(fd --hidden --follow --exclude ".git" .) 2> /dev/null'
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude ".git" .'
export FZF_DEFAULT_COMMAND=$FZF_CTRL_T_COMMAND

bindkey '^t' transpose-chars
bindkey '^x^f' fzf-file-widget

zstyle ":anyframe:selector:fzf:" command "fzf --height 40%"

bindkey '\es' anyframe-widget-cd-ghq-repository
bindkey '\ej' anyframe-widget-cd-ghq-repository
bindkey '^x^k' anyframe-widget-kill

unsetopt flow_control       # Let me use ^S and ^Q

add_project () {
  project=${1:-$PWD}
  emacsclient -e "(projectile-add-known-project \"${project}\")"
}