# shellcheck shell=bash
# shellcheck disable=SC2034 # Expected behavior for themes.
# shellcheck disable=SC2154 #TODO: fix these all.

# Detect whether a reboot is required
function show_reboot_required() {
	if [ -n "$_bf_prompt_reboot_info" ]; then
		if [ -f /var/run/reboot-required ]; then
			printf "Reboot required!"
		fi
	fi
}

# Set different host color for local and remote sessions
function set_host_color() {
	# Detect if connection is through SSH
	if [[ -n $SSH_CLIENT ]]; then
		printf '%s' "${lime_yellow}"
	else
		printf '%s' "${light_orange}"
	fi
}

# Set different username color for users and root
function set_user_color() {
	case $(id -u) in
		0)
			printf '%s' "${red}"
			;;
		*)
			printf '%s' "${cyan}"
			;;
	esac
}

# Define custom colors we need
# non-printable bytes in PS1 need to be contained within \[ \].
# Otherwise, bash will count them in the length of the prompt
function set_custom_colors() {
	dark_grey="\[$(tput setaf 8)\]"
	light_grey="\[$(tput setaf 248)\]"

	light_orange="\[$(tput setaf 172)\]"
	bright_yellow="\[$(tput setaf 220)\]"
	lime_yellow="\[$(tput setaf 190)\]"

	powder_blue="\[$(tput setaf 153)\]"
}

__ps_time() {
	printf '%s' "$(clock_prompt)${normal}\n"
}

function prompt_command() {
	ps_reboot="${bright_yellow}$(show_reboot_required)${normal}\n"

	ps_username="$(set_user_color)\u${normal}"
	ps_uh_separator="${dark_grey}@${normal}"
	ps_hostname="$(set_host_color)\h${normal}"

	ps_path="${yellow}\w${normal}"
	ps_scm_prompt="${light_grey}$(scm_prompt)"

	ps_user_mark="${normal} ${normal}"
	ps_user_input="${normal}"

	# Set prompt
	PS1="$ps_reboot$(__ps_time)$ps_username$ps_uh_separator$ps_hostname $ps_path $ps_scm_prompt$ps_user_mark$ps_user_input"
}

# Initialize custom colors
set_custom_colors

THEME_CLOCK_COLOR=${THEME_CLOCK_COLOR:-"$dark_grey"}

# scm theming
SCM_THEME_PROMPT_PREFIX=""
SCM_THEME_PROMPT_SUFFIX=""

SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${light_grey}"
SCM_THEME_PROMPT_CLEAN=" ${green}✓${light_grey}"
SCM_GIT_CHAR="${green}±${light_grey}"
SCM_SVN_CHAR="${bold_cyan}⑆${light_grey}"
SCM_HG_CHAR="${bold_red}☿${light_grey}"

safe_append_prompt_command prompt_command
