#!/bin/bash -i
#
# ZigzagProxy (ZPROXY)
# 
# This program is free software: you can redistribute it and/or modify it 
# under the terms of the GNU General Public License as published 
# by the Free Software Foundation; either version 3 of the License, 
# or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License 
# along with this program. If not, see http://www.gnu.org/licenses/. 
# 
# Copyright (C) 2012
# Free Software Foundation, Inc.
# 
# For information or to collaborate on the project:
# https://savannah.nongnu.org/projects/zproxy
# 
# Gianluca Zoni
# http://inventati.org/zoninoz
# zoninoz@inventati.org
#

prog="zproxy"
proxy_list_sources=(
    https://ip-adress.com/proxy_list/
    http://proxy-list.org/en/index.php
)

PROG=$(tr a-z A-Z <<< "$prog")
path_prog="$HOME/.$prog"
path_tmp="$path_$prog"
mkdir -p "$path_prog"
#proxy_types=( Transparent )
credentials="$path_prog/.credenziali_router.txt"
max_waiting=40
    
url_update="http://git.savannah.nongnu.org/cgit/zproxy.git/snapshot/zproxy-1.0.tar.gz"

update=false
help=false
disable_proxy=false
transparent=false
anonymous=false
elite=false
reconnect=false
ip=false

user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
user_lang="$LANG"
user_language="$LANGUAGE"
prog_lang='en_US.UTF-8:en'

ip_server_url='http://indirizzo-ip.com/ip.php'

function init_colors {
	# Reset
    Color_Off='\e[0m'       # Text Reset
    
	# Regular Colors
    Black='\e[0;30m'        # Nero
    Red='\e[0;31m'          # Rosso
    Green='\e[0;32m'        # Verde
    Yellow='\e[0;33m'       # Giallo
    Blue='\e[0;34m'         # Blu
    Purple='\e[0;35m'       # Viola
    Cyan='\e[0;36m'         # Ciano
    White='\e[0;37m'        # Bianco
    
	# Bold
    BBlack='\e[1;30m'       # Nero
    BRed='\e[1;31m'         # Rosso
    BGreen='\e[1;32m'       # Verde
    BYellow='\e[1;33m'      # Giallo
    BBlue='\e[1;34m'        # Blu
    BPurple='\e[1;35m'      # Viola
    BCyan='\e[1;36m'        # Ciano
    BWhite='\e[1;37m'       # Bianco
    
	# Underline
    UBlack='\e[4;30m'       # Nero
    URed='\e[4;31m'         # Rosso
    UGreen='\e[4;32m'       # Verde
    UYellow='\e[4;33m'      # Giallo
    UBlue='\e[4;34m'        # Blu
    UPurple='\e[4;35m'      # Viola
    UCyan='\e[4;36m'        # Ciano
    UWhite='\e[4;37m'       # Bianco
    
	# Background
    On_Black='\e[40m'       # Nero
    On_Red='\e[41m'         # Rosso
    On_Green='\e[42m'       # Verde
    On_Yellow='\e[43m'      # Giallo
    On_Blue='\e[44m'        # Blu
    On_Purple='\e[45m'      # Purple
    On_Cyan='\e[46m'        # Ciano
    On_White='\e[47m'       # Bianco
    
	# High Intensty
    IBlack='\e[0;90m'       # Nero
    IRed='\e[0;91m'         # Rosso
    IGreen='\e[0;92m'       # Verde
    IYellow='\e[0;93m'      # Giallo
    IBlue='\e[0;94m'        # Blu
    IPurple='\e[0;95m'      # Viola
    ICyan='\e[0;96m'        # Ciano
    IWhite='\e[0;97m'       # Bianco
    
	# Bold High Intensty
    BIBlack='\e[1;90m'      # Nero
    BIRed='\e[1;91m'        # Rosso
    BIGreen='\e[1;92m'      # Verde
    BIYellow='\e[1;93m'     # Giallo
    BIBlue='\e[1;94m'       # Blu
    BIPurple='\e[1;95m'     # Viola
    BICyan='\e[1;96m'       # Ciano
    BIWhite='\e[1;97m'      # Bianco
    
	# High Intensty backgrounds
    On_IBlack='\e[0;100m'   # Nero
    On_IRed='\e[0;101m'     # Rosso
    On_IGreen='\e[0;102m'   # Verde
    On_IYellow='\e[0;103m'  # Giallo
    On_IBlue='\e[0;104m'    # Blu
    On_IPurple='\e[10;95m'  # Viola
    On_ICyan='\e[0;106m'    # Ciano
    On_IWhite='\e[0;107m'   # Bianco
}


function print_c {
    case "$1" in
	1)
	    echo -n -e '\e[1;32m' #verde
	    ;;
	2)
	    echo -n -e '\e[1;33m' #giallo
	    ;;	
	3)
	    echo -n -e '\e[1;31m' #rosso
	    ;;	
	4)
	    echo -n -e "$BBlue"
    esac
    echo -n -e "$2\n"
    echo -n -e "${Color_Off}"
}

function separator {
	#COLUMNS=$( tput cols ) 2>/dev/null
    if [ -z "$COLUMNS" ]
    then 
	COLUMNS=50
    fi

    echo -ne "${BBlue}"
    for column in $(seq 1 $COLUMNS)
    do
	echo -n -e "$1"
    done
    #\e[1;34m

    echo -ne "${Color_Off}"
}


function separator- {
    separator "─"
}

function fclear {
    #echo -n -e "\e[0;37m\e[40m\ec"
    #echo -n -e "\ec\e[37m\e[40m\e[J"
    echo -n -e "\ec${White}${On_Black}\e[J"
}

function cursor {
    local stato=$1
    case $stato in
	off)
	    echo -e -n "\033[?30;30;30c"
	    ;;
	on)
	    echo -e -n "\033[?0;0;0c"
	    ;;
    esac
}

function header {
    ## $1=label ; $2=colors ; $3=header pattern

    # echo -n -e "\e[1;34m $1 ${Color_Off}\n"
    local text="$1"
    local length_text=$(( ${#text}+2 ))
    local hpattern="$3"
    
    [ -z "$hpattern" ] && hpattern=" "
    echo -ne "$2"

    for column in `seq 1 $COLUMNS`
    do
	echo -ne "$hpattern" 
    done 

    if [ -n "$length_text" ] &&
	   [ -n "$COLUMNS" ]
    then
	if (( $length_text<=$COLUMNS ))
	then
	    echo -ne "\r$text${Color_Off}\n"

	else
	    echo -ne "\r${text:0:$COLUMNS}${Color_Off}${text:$COLUMNS}\n"
	fi
    fi
}

function header_z {
    fclear
    zclock
    header " ZigzagProxy ($prog) $zclock" "$On_Blue" " "
}

function header_box {
    header " $1 " "$Black${On_White}" "─" #"-" 
}

function header_dl {
    header " $1 " "$White${On_Blue}" " "
}

function zclock {
    if [[ "${LANGUAGE}${LANG}" =~ (it|IT) ]]
    then
	week=( "dom" "lun" "mar" "mer" "gio" "ven" "sab" )

    else
	week=( "sun" "mon" "tue" "wed" "thu" "fri" "sat" )
    fi
    
    #zclock="\033[1;$((COLUMNS-22))f$(date +%R) │ ${week[$( date +%w )]} $(date +%d·%m·%Y)"
    zclock="$(date +%R) │ ${week[$( date +%w )]} $(date +%d·%m·%Y)"
}


########################################

if [[ "${LANGUAGE}${LANG}" =~ (it|IT) ]]
then
    msg[0]="Installazione di $PROG"
    msg[1]="Installazione di $PROG in /usr/local/bin/ ..."
    msg[2]="Installazione completata."
    msg[3]="Intallazione automatica non riuscita"
    
else
    msg[0]="Installing $PROG"
    msg[1]="Installing $PROG in /usr/local/bin/ ..."
    msg[2]="Installation completed"
    msg[3]="Installation failed"
fi

init_colors

pwd_old="$PWD"
header_box "${msg[0]}" #"Installazione di $PROG"
print_c 0 ""
cd /tmp

wget -T $max_waiting "$url_update"
    
print_c 4 "${msg[1]}" #"Installazione di $PROG in /usr/local/bin/ ..."
archive="${url_update##*\/}"
tar -xzf "$archive"

rm -f "$archive"

cd "${archive%.tar.gz}"
chmod +x $prog

version=$(wget -qO- http://download-mirror.savannah.gnu.org/releases/zproxy/version)

mv $prog /usr/local/bin/ &&
    echo "$version" >"$path_prog/version" &&
    print_c 1 "${msg[2]}" || #"Installazione completata."
	(
	    sudo mv $prog /usr/local/bin/ &&
		echo "$version" >"$path_prog/version" &&
		print_c 1 "${msg[2]}"
	) || #"Installazione completata." 
	(
	    echo -n "(Root)" &&
		su -c "mv $prog /usr/local/bin/" &&
		echo "$version" >"$path_prog/version" &&
		print_c 1 "${msg[2]}"
	) || #"Installazione completata." 
	print_c 3 "${msg[3]}" #"Intallazione automatica non riuscita"
echo
cd "$pwd_old"