#!/usr/bin/env zsh
# -------------------------------------------------------------------------------------------------
# Copyright (c) 2011 Guido van Steen
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted
# provided that the following conditions are met:
#
#	* Redistributions of source code must retain the above copyright notice, this list of conditions
#		and the following disclaimer.
#	* Redistributions in binary form must reproduce the above copyright notice, this list of
#		conditions and the following disclaimer in the documentation and/or other materials provided
#		with the distribution.
#	* Neither the name of the FIZSH nor the names of its contributors may be used to endorse or
#		promote products derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# -------------------------------------------------------------------------------------------------
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
# vim: ft=zsh sw=2 ts=2 et
#
# /usr/bin/fizsh

export F_VERSION="1.0.2"
export F_DOT_DIR=~/.fizsh
F_ETC_DIR=/etc/fizsh
F_FIZSHRC=fizshrc.zsh
F_PROMPT=fizsh-prompt.zsh
F_SEARCH=zsh-history-substring-search.zsh
F_SYNTAX=zsh-syntax-highlighting.zsh
F_HIGHLIGHTERS_DIR=highlighters
 
# Fizsh can be called with four optons: "-l"/"--login", "-h"/"--help" "-v"/"--version" "-r/--reinstall"

if [[ ( $@ == "--version" ) || ( $@ == "-v" ) ]]; then
	echo $F_VERSION
else
	if [[ ( $@ == "--help" ) || ( $@ == "-h" ) ]]; then
		echo "Usage: fizsh [<options>] [<argument> ...]"
		echo "	-h, --help					show this message, then exit"
		echo "	-l, --login				 start a login shell"
		echo "	-v, --version			 show fizsh version number, then exit"
		echo ""
		echo "fizsh is a interactive front end to zsh. Options and"
		echo "arguments not mentioned here cause fizsh to revert to zsh."
	else
		if [[ ( $@ == "--login" ) || ( $@ == "-l" ) || ( $@ == "--reinstall" ) || ( $@ == "-r" ) || ( $@ == "" ) ]]; then
			[[ $+ZDOTDIR == 1 ]] && export OLD_ZDOTDIR=$ZDOTDIR
			if [[ ! -d $F_DOT_DIR ]]; then
				mkdir $F_DOT_DIR
			fi
			if [[ ( ! -f $F_DOT_DIR/.fizshrc ) ]]; then
				touch $F_DOT_DIR/.fizshrc
				chmod +x $F_DOT_DIR/.fizshrc
			fi
			if [[ ( $@ == "--reinstall" ) || ( $@ == "-r" ) ]]; then
				cp $F_ETC_DIR/$F_PROMPT $F_DOT_DIR/$F_PROMPT
				cp $F_ETC_DIR/$F_SEARCH $F_DOT_DIR/$F_SEARCH
				cp $F_ETC_DIR/$F_SYNTAX $F_DOT_DIR/$F_SYNTAX
				rm -rf $F_DOT_DIR/$F_HIGHLIGHTERS_DIR
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/brackets
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/cursor
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/main
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/pattern
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/root				
				cp $F_ETC_DIR/brackets-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/brackets/brackets-highlighter.zsh
				cp $F_ETC_DIR/cursor-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/cursor/cursor-highlighter.zsh 
				cp $F_ETC_DIR/main-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/main/main-highlighter.zsh
				cp $F_ETC_DIR/pattern-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/pattern/pattern-highlighter.zsh
				cp $F_ETC_DIR/root-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/root/root-highlighter.zsh
				cp $F_ETC_DIR/$F_FIZSHRC  $F_DOT_DIR/.zshrc 
			fi 
			if [[ ( ! -f $F_DOT_DIR/$F_PROMPT ) ]]; then
				cp $F_ETC_DIR/$F_PROMPT $F_DOT_DIR/$F_PROMPT
			fi
			if [[ ( ! -f $F_DOT_DIR/$F_SEARCH ) ]]; then
				cp $F_ETC_DIR/$F_SEARCH $F_DOT_DIR/$F_SEARCH
			fi
			if [[ ( ! -f $F_DOT_DIR/$F_SYNTAX ) ]]; then
				cp $F_ETC_DIR/$F_SYNTAX $F_DOT_DIR/$F_SYNTAX
			fi
			if [[ ( ! -d $F_DOT_DIR/$F_HIGHLIGHTERS_DIR ) ]]; then
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/brackets
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/cursor
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/main
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/pattern
				mkdir -p $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/root				
				cp $F_ETC_DIR/brackets-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/brackets/brackets-highlighter.zsh
				cp $F_ETC_DIR/cursor-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/cursor/cursor-highlighter.zsh 
				cp $F_ETC_DIR/main-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/main/main-highlighter.zsh
				cp $F_ETC_DIR/pattern-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/pattern/pattern-highlighter.zsh
				cp $F_ETC_DIR/root-highlighter.zsh $F_DOT_DIR/$F_HIGHLIGHTERS_DIR/root/root-highlighter.zsh
			fi 
			if [[ ( ! -f $F_DOT_DIR/.zshrc ) ]]; then
				cp $F_ETC_DIR/$F_FIZSHRC  $F_DOT_DIR/.zshrc
			fi
			export ZDOTDIR=$F_DOT_DIR
			echo -e 'Welcome to fizsh, the friendly interactive zshell'
			echo -e 'Type \033[03;32mman fizsh\033[00m for instructions on how to use fizsh'
			if [[ ( $@ == "" ) ]]; then
				zsh -k
			else
				zsh -kl
			fi
			echo ''
			echo ''
			echo 'Goodbye'
			[[ $+OLD_ZDOTDIR == 0 ]] && unset ZDOTDIR
			[[ $+OLD_ZDOTDIR == 1 ]] && ZDOTDIR=$OLD_ZDOTDIR
		unset OLD_ZDOTDIR
		else
			zsh $@
		fi
	fi
fi
unset F_DOT_DIR
unset F_ETC_DIR
unset F_HIGHLIGHTERS_DIR
unset F_PROMPT
unset F_SEARCH
unset F_SYNTAX
unset F_VERSION

