#!/usr/bin/env bash

mkcd() {
  mkdir -pv $1 && cd $1
}

# cd to git root
cdr() {
	local dir="$(git rev-parse --show-toplevel)"
	if [[ -d "$dir" ]]; then
		cd "$dir/$1"
	else
		echo "Not in a git repo" >&2
		return 1
	fi

}

# cd to node package root
cdp() {
	find-up() {
		local current_path
		current_path=$(pwd)
		while [[ -n $current_path ]]; do
			if [[ -e $current_path/$1 ]]; then
				echo $current_path/$1
				return
			fi
			current_path=${current_path%/*}
		done
		return 1
	}

	local packagejson
	packagejson=$(find-up package.json)
	if [[ $? != 0 ]]; then
		echo "Not in a node package" >&2
		return 1
	fi
	local package_root=$(dirname "$packagejson")
	if [[ -d "$package_root" ]]; then
		cd "$package_root/$1"
	else
		echo "Not in a node package" >&2
		return 1
	fi

}

repo() {
	cd $(findrepo ~/code | fzf)
}

fdNvimRtp() {
	local search_term="${1:-.}"
	nvim -e -s -c "set runtimepath?" \
		| sed s/runtimepath=// | tr "," $IFS | awk '{$1=$1};1' \
		| xargs fd $search_term --max-depth=1 2>/dev/null
}


# TODO: rewrite in dash-compatible way
nvmuse() {
	export NVM_DIR="$HOME/.nvm"
	[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
	[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
	nvm use $@
	SetWebCerts
}

fnminit() {
	# node via fnm
	FNM_PATH="$HOME/.local/share/fnm"
	if [ -d "$FNM_PATH" ]; then
		export PATH="$PATH:$FNM_PATH"
		eval "`fnm env`"
	fi
}

SdkManInit() {
	export SDKMAN_DIR="$HOME/.sdkman"
	[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
}

RBInit() {
	eval "$(rbenv init - zsh)"
}

SetWebCerts() {
	export NODE_EXTRA_CA_CERTS="/tmp/mega.pem"
	if [ ! -f $NODE_EXTRA_CA_CERTS ]; then
		security find-certificate -a -p /Library/Keychains/System.keychain > $NODE_EXTRA_CA_CERTS
	fi
}

#tea-magic() {
#	[[ -d "$HOME/.tea" ]] && source <("$HOME/.tea/tea.xyz/v*/bin/tea" --magic)
#}

function afk() {
  echo "set i to 0
  repeat while i < 120
  tell application \"System Events\" to key code 80
  set i to i + 1
  delay 30
end repeat" | osascript
}

function vo() {
	vim $(fd | fzf)
}

function trash() {
	(
	set -o errexit
	set -o nounset
	set -o pipefail
	set -o xtrace

	for file in $@; do
		mv $file ~/.local/share/Trash/files/
		cat <<EOF > ~/.local/share/Trash/info/$(basename $file).trashinfo
[Trash Info]
Path=$(realpath $file)
DeletionDate=$(date +%Y-%m-%dT%H:%M:%S)
EOF
	done
)
}

function fastrm() {
	(
		set -o errexit
		set -o nounset
		set -o pipefail
		local tempdir=$(mktemp -d)
		mv $@ $tempdir
		rm -rf $tempdir&
		# if you want it to be extra fast, uncomment the next two lines
		## https://unix.stackexchange.com/questions/277203/whats-the-fastest-way-to-remove-all-files-subfolders-in-a-directory/277205
		# rsync --delete --archive $(mktemp -d) $tempdir&
	)
}

is_bytedance_machine() {
	if [[ $USER == "bytedance" ]]; then
		return 0
	else
		return 1
	fi
}

pick_ide() {
	printf "nvim\nnvim\nneovide\ntrae\ntrae\ncode\nzed" | shuf -n 1
}

function pick_ai_cli() {
	if is_bytedance_machine; then
		printf '%s\n' \
			"pi 1" "crush 1" "gemini 1" "coco 1" "traeIDE 2" "codex 2" "copilot 2" "antigravity 3" "claude 3" "opencode 4" "traex 20" |
			awk '{for (i = 0; i < $2; i++) print $1}' |
			shuf -n 1
	else
		printf '%s\n' \
			"pi 1" "crush 1" "gemini 1" "traeIDE 1" "codex 2" "copilot 2" "antigravity 3" "claude 3" "opencode 4" |
			awk '{for (i = 0; i < $2; i++) print $1}' |
			shuf -n 1
	fi
}

function pick_ai_chatbot() {
	if is_bytedance_machine; then
		printf '%s\n' \
"Mira 6" "tika 5" "aime 4" "gemini 4" "coco 3" "doubao.com 3" "dola 2" "github_copilot 2" "grok 2" "chatgpt 2" "LarkAI 2" "claude 2" "codex 1" "perplexity 1" "google_ai 1" "microsoft_copilot 1" "meta 1" "deepseek 1" "tako(phone) 1" "openrouter_chat 1" "chatboxai 1" "hf_inference 1" "kimi 1" |
			awk '{for (i = 0; i < $2; i++) print $1}' |
			shuf -n 1
	else
		printf '%s\n' \
		"gemini 4" "github_copilot 2" "grok 2" "chatgpt 2" "openwebui 2" "claude 2" "codex 1" "perplexity 1" "google_ai 1" "microsoft_copilot 1" "meta 1" "deepseek 1" "tako(phone) 1" "openrouter_chat 1" "chatboxai 1" "hf_inference 1" "kimi 1"|
			awk '{for (i = 0; i < $2; i++) print $1}' |
			shuf -n 1
	fi
}

function pick_browser() {
	printf '%s\n' \
		"chrome 5" "firefox 1" "safari 1" |
		awk '{for (i = 0; i < $2; i++) print $1}' |
		shuf -n 1
}

[[ -r ~/dotfiles/bin/clone ]] && source ~/dotfiles/bin/clone

[[ -r ~/dotfiles/wmt.sh ]] && source ~/dotfiles/wmt.sh

