#!/bin/bash
#########################################################
# 							#
# This is BashStyle-NG  				#
#							#
# Licensed under GNU GENERAL PUBLIC LICENSE v3    	#
#							#
# Copyright 2007 - 2015 Christopher Bratusek		#
#							#
#########################################################

. gettext.sh
TEXTDOMAIN="nx-rc"

export BSNG_PREFIX=/usr
export BSNG_DATA_DIR=/usr/share/
export BSNG_RC_DIR=$BSNG_DATA_DIR/bashstyle-ng/rc
export BSNG_BIN_DIR=$BSNG_RC_DIR/bin
export BSNG_LOCKFILE=$HOME/.bashstyle.lock
export BSNG_VERSION=8.99
export BSNG_YEAR="2007 - 2015"
INI_VERSION=9

if [[ ! -f ${HOME}/.bs-ng.ini ]]; then
	if [[ -f /etc/bs-ng_vendor.ini && $(grep ini_version /etc/bs-ng_vendor.ini) == *${INI_VERSION} ]]; then
		cp /etc/bs-ng_vendor.ini ${HOME}/.bs-ng.ini
	else
		cp ${BSNG_DATA_DIR}/bashstyle-ng/bs-ng.ini ${HOME}/.bs-ng.ini
	fi
elif [[ $(grep Separator ${HOME}/.bs-ng.ini) ]]; then
	sed -e '/^\[Separator\]$/,$d' -i $HOME/.bs-ng.ini
fi

ERR_MSG=""

for RC in internal/misc internal/logging; do
	source $BSNG_RC_DIR/$RC
done

export BSNG_LOGFILE=$HOME/.bashstyle.log
dbg_log rm -f $BSNG_LOGFILE
dbg_log touch $BSNG_LOGFILE

dbg_log source $BSNG_RC_DIR/styles/null-rc

dbg_msg $"BashStyle-NG Starting"
dbg_msg $"BashStyle-NG Bash Major Version:" $(echo ${BASH_VERSINFO[0]})
dbg_msg $"BashStyle-NG Bash Minor Version:" $(echo ${BASH_VERSINFO[1]})
dbg_msg $"BashStyle-NG Bash Patch Level:" $(echo ${BASH_VERSINFO[2]})
dbg_msg $"BashStyle-NG Version:" $BSNG_VERSION
dbg_msg $"BashStyle-NG Prefix:" $BSNG_PREFIX
dbg_msg $"BashStyle-NG Debugging: Enabled"
dbg_msg $"BashStyle-NG Logfile:" $BSNG_LOGFILE

if [[ $(ini_get use_readlinecfg) == "True" ]]; then
	dbg_msg $"BashStyle-NG Loading:" $"ReadlineCFG"
	dbg_log source $BSNG_RC_DIR/settings/readline-rc
	dbg_log bind -f ${HOME}/.inputrc
fi

if [[ $(ini_get use_vimcfg) == "True" ]]; then
	dbg_msg $"BashStyle-NG Loading:" $"VimCFG"
	dbg_log source $BSNG_RC_DIR/settings/vim-rc
fi

if [[ $(ini_get use_nanocfg) == "True" ]]; then
	dbg_msg $"BashStyle-NG Loading:" $"NanoCFG"
	dbg_log source $BSNG_RC_DIR/settings/nano-rc
fi

if [[ $(ini_get use_bashstyle) == False ]]; then
	dbg_msg $"BashStyle-NG: Exiting"
else
	dbg_msg $"BashStyle-NG Loading:" $"BashStyle-NG"
fi

if [[ $(ini_get enable_colors) == "True" ]]; then
	dbg_log source $BSNG_RC_DIR/settings/color-rc
fi

if [[ $(ini_get use_lscolors) == "True" && $(ini_get enable_colors) == "True" ]]; then
	dbg_msg $"BashStyle-NG Loading:" $"LSCOLORS"
	dbg_log source $BSNG_RC_DIR/settings/ls-rc
fi

dbg_log source $BSNG_RC_DIR/settings/git-rc

if [[ $(ini_get use_bashstyle) == "True" ]]; then

	if [[ $(lsb_release -is) == Debian ]]; then
	#	if [[ ${1} == -r ]]; then
	#		START_LINE=$(sed -n '/^\#if \[ "$color_prompt" = yes/=' ~/.bashrc)
	#		if [[ ${START_LINE} ]]; then
	#			END_LINE=$((${START_LINE}+14))
	#			sed -e "${START_LINE},${END_LINE}s/^\#/" -i ~/.bashrc
	#		fi
	#	else
			START_LINE=$(sed -n '/^if \[ "$color_prompt" = yes/=' ~/.bashrc)
			if [[ ${START_LINE} ]]; then
				END_LINE=$((${START_LINE}+14))
				sed -e "${START_LINE},${END_LINE}s/^/\#/" -i ~/.bashrc
			fi
	#	fi
	fi

	if [[ -f /etc/bash.bashrc ]]; then
		BASHRC=/etc/bash.bashrc
	else	BASHRC=/etc/bashrc
	fi

	dbg_log source $BSNG_RC_DIR/settings/alias-rc

	dbg_msg $"BashStyle-NG Setting:" $"ps2 ps3 ps4 char" $(ini_get ps234)
	ps234char=$(ini_get ps234)

	if [[ $(ini_get colored_man) == "True" ]]; then
		dbg_log source $BSNG_RC_DIR/settings/man-rc
	fi

	dbg_log source $BSNG_RC_DIR/settings/shopt-rc

	shopt -s checkwinsize

	if [[ -e $HOME/.bashstyle.custom ]]; then \
		dbg_msg $"BashStyle-NG Loading:" $"Custom Settings"
		dbg_log source $HOME/.bashstyle.custom
	fi

	if [[ $(ini_get random_style) == "True" ]]; then \
		dbg_msg $"BashStyle-NG Setting:" $"Style Random"
		dbg_log source $BSNG_RC_DIR/settings/random-rc
	else
		pstyle=$(ini_get prompt_style)
	fi

	use_custom_prompt=$(ini_get use_custom_prompt)

	if [[ $use_custom_prompt == "True" ]]; then \
		dbg_msg $"BashStyle-NG Setting:" $"Style Custom"
		dbg_log source $BSNG_RC_DIR/styles/custom-rc
	elif [[ -e $BSNG_RC_DIR/styles/${pstyle}-rc ]]; then
		dbg_msg $"BashStyle-NG Setting:" $"Style" $pstyle
		dbg_log source $BSNG_RC_DIR/styles/${pstyle}-rc
	else
		dbg_msg $"BashStyle-NG Setting:" $"Style Fallback"
		dbg_log source $BSNG_RC_DIR/styles/fallback-rc
	fi

	dbg_msg $"BashStyle-NG Setting:" $"PS2 PS3 PS4"
	PS2="$pscolor $ps234char$fontcolor "
	PS3="$pscolor $ps234char$ps234char$fontcolor "
	PS4="$pscolor $ps234char$ps234char$ps234char$fontcolor "

	if [[ $(ini_get colorshell) == True && ${enabcol} == True ]]; then
		source $BSNG_RC_DIR/settings/colorshell
	fi

	if [[ $(ini_get tab_rotation) == "True" ]]; then \
		dbg_msg $"BashStyle-NG Setting:" $"Tab-Rotation" $"On"
		dbg_log bind 'TAB:menu-complete'
		dbg_log complete -d -X '.[a-zA-Z0-9]*' cd
	else	dbg_msg $"BashStyle-NG Setting:" $"Tab-Rotation" $"Off"
	fi

	dbg_log source $BSNG_RC_DIR/settings/options-rc

	WelcomeMessage=$(ini_get welcome_message)

	if [[ $USER_BIRTHDAY == $(date +%m-%d) && ! -e ~/.bday ]]; then
		cat $BSNG_RC_DIR/internal/birthday
		touch ~/.bday
	elif [[ $WelcomeMessage != "" ]]; then \
		dbg_msg $"BashStyle-NG Setting:" $"Welcome Message"
		dbg_log $WelcomeMessage
	fi

	[[ $USER_BIRTHDAY != $(date +%m-%d) && -e ${HOME}/.bday ]] && rm -f ${HOME}/.bday

fi

if [[ $(ini_get use_readline == True) ]]; then
	dbg_log source $BSNG_RC_DIR/settings/keybindings-rc
fi

function lscd() {

	OLD_PWD=${PWD}
	clear

	if [[ -f "${1}" ]]; then
		builtin cd "${1%/*}" &>/dev/null
	elif [[ -d "${1}" ]]; then
		builtin cd "${1}" &>/dev/null
	elif [[ "${1}" == -*   ]]; then
		builtin cd "${*}" &>/dev/null
	elif [[ ! "${1}" ]]; then
		builtin cd
	elif [[ $(ini_get lscd_mkdir) == True ]]; then
		mkdir -p "${1}"
		builtin cd "${1}" &>/dev/null
	fi


	if [[ ${OLD_PWD} != ${PWD} ]]; then
		echo -e "\n${epink}content:\n"
		if [[ $(systemkit countvisibleitems) -gt 0 ]]; then
			ls $LSCD_OPTS
		else	echo -e "${ecream}-- empty --\n"
		fi
	fi

	echo "$PWD" > $HOME/.lastpwd
}

function treecd () {
	builtin cd "${@}" &>/dev/null

	echo -e "${epink}content:"
	tree -L 1 $TREE_OPTS
	echo "$PWD" > $HOME/.lastpwd
}

function reload () {
	#xk2c from commandlinefu.com
	builtin unalias -a
	builtin unset -f $(builtin declare -F | gawk '{print $3}')
	source /etc/bashstyle.sh

}


if [[ $ERR_MSG != "" ]]; then
	echo -e "${eyellow}\n\nImportant informations:"
	echo -e "${eorange}${ERR_MSG}\n"
fi

dbg_finalize
