#!/bin/bash
#author:Cristiano Siqueira
#descricao:Automatiza o backup ou restauração de um PDV ou Supervisor.
#Revisao:


user=`whoami`
resp=0
bkprest=0 pdvousup=0 linha=8
skytef=$resp scanntech=$resp backup=$resp openerp=$resp rclocal=$resp crontab=$resp shfrente=$resp

versao=$(lsb_release -r -s)
versaopdv=2408.1
sigutilsni=0

lerpfvcfg(){
    while [ $linha -le 19 ]
    do
      cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^$linha: | cut -d: -f2
      linha=$(( $linha + 1 ))
    done
}

erro_opcao(){
    clear
    echo "╔══════════════════════════════════════════════════════════╗"
    echo "║              Você digitou uma opção erra!                ║"
    echo "║  Por favor, reinicie o processo e responda corretamente. ║"
    echo "╚══════════════════════════════════════════════════════════╝"
    exit
}

erro_opcao_continuar(){

    echo "╔═════════════════════════════════════╗"
    echo "║     Você digitou uma opção erra!    ║"
    echo "║  Continuando processo de instalação ║"
    echo "╚═════════════════════════════════════╝"
    sleep 3
}

fim(){
	echo "      ╔═══════╗"
	echo "      ║  FIM  ║"
	echo "      ╚═══════╝"
	exit
}


installpdv18(){
	# Versão atualizada dos pacotes
if [[ $user == "root" ]]; then

	# Versão atualizada dos pacotes
	mkdir /tmp/install_sigfrente/
	chmod 777 /tmp/install_sigfrente/
	cd /tmp/install_sigfrente/
	rm -rf update
	apt update -y

	if [[ $versao == '16.04' ]];then
		sigutils='sigutils-2.4.9.tar.gz'
	elif [[ $versao == '18.04' ]];then
		sigutils='SigUtils-2.4.14.tar.gz'
	elif [[ $versao == '14.04' ]];then
		clear
		echo "╔═════════════════════╗"
		echo "║ Versão 14 do Linux  ║"
		echo "║ Caixa desatualizado ║"
		echo "║ Processo encerrado  ║"
		echo "╚═════════════════════╝"
		exit
	fi

	sigfrente='sigpdvnfce-3.1.21L3.deb'
	pythonnfe='nfe-4.51.16.tar.gz'
	geraldo='geraldo_0.4.10-stable-sig.tar.gz'
	kiwi='python-kiwi_1.9.27-nmu1_all.deb'
	stoqdrivers='stoqdrivers_0.9.11.9i18_all.deb'
	pyxmlsec='pyxmlsec_0.3.1.orig.tar.gz'
	pyxmlsecdeb='python-pyxmlsec_0.3.1-1openhouse2_amd64.deb'
	xmlsec='xmlsec-0.3.1.tar.gz'
	pysqlalchemy='python-sqlalchemy_0.8.4-nmu1build1_all.deb'
	pysqlalchemydoc='python-sqlalchemy-doc_0.8.4-nmu1build1_all.deb'
	pyordereddict='python-ordereddict_1.1-2chl1~trusty1_all.deb'
	pyserial='python-serial_2.6-nmu1build1_all.deb'
	errorhandler='python-errorhandler_1.1.1-1_all.deb'
	xlutils='python-xlutils_1.5.1-1_all.deb'
	elixir='python-elixir_0.7.1-2_all.deb'
	vpostgresql='13'

	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/sig.jpg
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/menu-sig.png
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/txt/start-sigpdv

	# Baixando pacotes
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$sigfrente
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$sigutils
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pythonnfe
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$geraldo
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$kiwi
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$stoqdrivers
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pyxmlsecdeb
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$errorhandler
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$xlutils
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$elixir
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pyserial
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pysqlalchemy
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pysqlalchemydoc
	wget -c --progress=bar:force download.sigsolucoes.net.br/produtos/crss/PDV/$pyordereddict
	chmod -R 777 /tmp/install_sigfrente

	if  [ -e $sigfrente       ] && [ -e $kiwi          ] &&
		[ -e $sigutils        ] && [ -e $pythonnfe     ] &&
		[ -e $geraldo         ] && [ -e $stoqdrivers   ] &&
		[ -e $pyxmlsecdeb     ] && [ -e $errorhandler  ] &&
		[ -e $xlutils         ] && [ -e $elixir        ] &&
		[ -e $pyserial        ] && [ -e $pysqlalchemy  ] &&
		[ -e $pysqlalchemydoc ] && [ -e $pyordereddict ];then
		echo "╔════════════════════════════════╗"
		echo "║ Download efetuado com sucesso! ║"
		echo "╚════════════════════════════════╝"
	else
		echo "╔════════════════════════════════════════╗"
		echo "║ Não foi possível efetuar o download... ║"
		echo "╚════════════════════════════════════════╝"
		echo "╔════════════════════════════════════════════════════╗"
		echo "║ Verifique se os links de downloads estão corretos. ║"
		echo "╚════════════════════════════════════════════════════╝"
		exit
	fi

	# Instalando Pacotes Necessários
	echo "╔═════════════════════════════╗"
	echo "║ Obtendo pacotes Necessários ║"
	echo "╚═════════════════════════════╝"
	apt update -y
	apt -f install vim -y
	apt -f install openssh-server -y
	apt -f install ssh -y
	apt -f install terminator -y

	# Instalando dependencias dos pacotes SigPDV3.1-NFC-e
	echo -e "╔════════════════════════════════════════════════════╗"
	echo -e "║ Obtendo pacotes para instalação SigPDV3.1-NFC-e... ║"
	echo -e "╚════════════════════════════════════════════════════╝"
	apt update -y
	dpkg --add-architecture i386
	apt -f install python-pip -y
	apt -f install xmlsec1 -y
	apt -f install python-libxml2 -y
	apt -f install python-libxmlsec -y
	apt -f install python-openssl -y
	apt -f install python-lxml -y
	apt -f install libxmlsec1-openssl -y
	apt -f install libxmlsec1-dev -y
	apt -f install libxslt1-dev -y
	apt -f install zlib1g-dev -y
	apt -f install libxml2-dev -y
	apt -f install libxml2:amd64 -y
	apt -f install libxml2:i386 -y
	apt -f install lib32stdc++6 -y
	apt -f install libusb-0.1-4 -y
	apt -f install libtool -y
	apt -f install libqtgui4 -y
	apt -f install libqtcore4 -y
	apt -f install libqt4-xml -y
	apt -f install libqt4-test -y
	apt -f install libqt4-script -y
	apt -f install libqt4-network -y
	apt -f install libqt4-dbus -y
	apt -f install libgle3 -y
	apt -f install libssl-dev -y
	apt -f install libffi-dev -y
	apt -f install python3-smbc -y
	apt -f install python-opengl -y
	apt -f install python-setuptools -y
	apt -f install pyside-tools -y
	apt -f install python-requests -y
	apt -f install python-docutils -y
	apt -f install python2.7-zope -y
	apt -f install python-reportlab -y
	apt -f install python-psycopg2 -y
	apt -f install python-dateutil -y
	apt -f install python-keybinder -y
	apt -f install python-pil -y
	apt -f install python-pyside -y
	apt -f install python-pyside.qtopengl -y
	apt -f install python-dev -y
	apt -f install swig -y
	apt -f install default-libmysqlclient-dev -y
	apt -f install libmysqlclient-dev -y
	apt -f install python-usb -y
	apt -f install python-rex -y
	apt -f install python-qrcode -y
	apt -f install python-dnspython -y
	apt -f install python-crypto -y
	apt -f install python-m2crypto -y
	apt -f install python-mysqldb -y
	apt -f install python-beautifulsoup -y
	apt -f install python-qt4 -y
	apt -f install python-qt4-gl -y
	apt -f install qt4-designer -y
	apt -f install qt4-dev-tools -y
	apt -f install build-essential -y
	apt -f install autoconf -y
	apt -f install pkg-config -y
	apt -f install idle-python2.7 -y

	# Instalação Postgresql

	#apt install postgresql -y
	if [[ $versao < "20.04" ]];then
		sudo sh -c 'echo "deb https://apt-archive.postgresql.org/pub/repos/apt bionic-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
	elif [[ $versao -le "20.04" ]];then
		sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
	fi
	wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
	apt update -y
	apt install postgresql-13 postgresql-client-13 -y

	if [[ -e /etc/postgresql/15/main/ ]];then
		apt --purge remove postgresql-15 -y
	fi

	# Configurações Postgres

	echo -e "╔════════════════════════════════════════════════════════════════╗"
	echo -e "║ Configuração do postgres alterado para utilização do SigFrente ║"
	echo -e "╚════════════════════════════════════════════════════════════════╝"
	cd /etc/postgresql/$vpostgresql/main/
	sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" postgresql.conf
	sed -i "s/127.0.0.1\/32/0.0.0.0\/0/g" pg_hba.conf
	sed -i "s/md5/trust/g" pg_hba.conf
	sed -i "s/peer/trust/g" pg_hba.conf
	/etc/init.d/postgresql reload
	/etc/init.d/postgresql restart
	createdb -U postgres -E utf8 sigpdv -h localhost
#    psql -c "ALTER USER postgres WITH PASSWORD ''" -d template1


	apt -f install pgadmin3 -y
	apt -f install --reinstall cups-filters -y
	pip install segno
	pip install pytz
	pip install "cython<0.23"

	# Instalado Pacote Python-Kiwi

	echo -e "╔═══════════════════════════════╗"
	echo -e "║ Instalando pacote Python-Kiwi ║"
	echo -e "╚═══════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $kiwi
	sleep 3

	# Instalando Pacote Geraldo-Stable

	echo -e "╔══════════════════════════════════╗"
	echo -e "║ Instalando pacote Geraldo-Stable ║"
	echo -e "╚══════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	tar xfvz $geraldo
	cd /tmp/install_sigfrente/Geraldo-0.4.10-stable-sig/
	python setup.py install
	sleep 3

	# Instalado Pacote PyXmlSec.deb

	echo -e "╔════════════════════════════════╗"
	echo -e "║ Instalando pacote PyXmlSec.deb ║"
	echo -e "╚════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $pyxmlsecdeb
	sleep 3

	# Instalado Pacote StoqDrivers

	echo -e "╔═══════════════════════════════╗"
	echo -e "║ Instalando pacote StoqDrivers ║"
	echo -e "╚═══════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $stoqdrivers
	sleep 3

	# Instalando Pacote ErrorHandler

	echo -e "╔════════════════════════════════╗"
	echo -e "║ Instalando pacote ErrorHandler ║"
	echo -e "╚════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $errorhandler
	sleep 3

	# Instalado Pacote XlUtils

	echo -e "╔═══════════════════════════╗"
	echo -e "║ Instalando pacote XlUtils ║"
	echo -e "╚═══════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $xlutils
	sleep 3

	# Instalado Pacote Python-Sqlalchemy

	echo -e "╔═════════════════════════════════════╗"
	echo -e "║ Instalando pacote Python-Sqlalchemy ║"
	echo -e "╚═════════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $pysqlalchemy
	dpkg -i $pysqlalchemydoc
	sleep 3

	# Instalado Pacote Python-Serial

	echo -e "╔═════════════════════════════════╗"
	echo -e "║ Instalando pacote Python-Serial ║"
	echo -e "╚═════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $pyserial
	sleep 3

	# Instalado Pacote Python-Elixir

	echo -e "╔════════════════════════════════╗"
	echo -e "║ Instalando pacote Python-Elixr ║"
	echo -e "╚════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $elixir
	sleep 3

	# Instalado Pacote Python-Ordereddict

	echo -e "╔══════════════════════════════════════╗"
	echo -e "║ Instalando pacote Python-Ordereddict ║"
	echo -e "╚══════════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $pyordereddict
	sleep 3

	# Instalado Pacote SigUtils
	if [[ $versao == '16.04' ]];then
		echo -e "╔══════════════════════════════════╗"
		echo -e "║ Instalando pacote sigutils-2.4.9 ║"
		echo -e "╚══════════════════════════════════╝"
		cd /tmp/install_sigfrente/
		tar xfvz sigutils-2.4.9.tar.gz
		cd sigutils-2.4.9/
		python setup.py install
	elif [[ $versao == '18.04' ]];then
		echo -e "╔═══════════════════════════════════╗"
		echo -e "║ Instalando pacote SigUtils-2.4.14 ║"
		echo -e "╚═══════════════════════════════════╝"
		cd /tmp/install_sigfrente/
		tar xfvz SigUtils-2.4.14.tar.gz
		cd SigUtils-2.4.14/
		python setup.py install
	elif [[ $versao == '14.04' ]];then
		echo "| Versão 14 do Linux  |"
		echo "| Caixa desatualizado |"
		echo "| Processo encerrado  |"
		exit
	else
		echo "Algo errado na verão do Sistema Linux"
		sigutilsni=1
	fi

	# Instalado Pacote Python-NF-e
	echo -e "╔═════════════════════════════════════╗"
	echo -e "║ Instalando pacote pythonnfe 4.51.16 ║"
	echo -e "╚═════════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	tar xfvz $pythonnfe
	cd /tmp/install_sigfrente/nfe-4.51.16/
	python setup.py install
	sleep 3

	# Instalado Pacote SigPDV3.1-NFC-e
	echo -e "╔═══════════════════════════════════════╗"
	echo -e "║ Instalando pacote Sig Frente 3.1.21L3 ║"
	echo -e "╚═══════════════════════════════════════╝"
	cd /tmp/install_sigfrente/
	dpkg -i $sigfrente
	sleep 3

	# Atualiza PDV para ultima versão
	echo -e "╔════════════════════════════════════════════════════════════════╗"
	echo -e "║ Baixando TAR do sigpdv atualizadado SigFrente e descampactando ║"
	echo -e "╚════════════════════════════════════════════════════════════════╝"
	sleep 3
	cd /tmp/install_sigfrente/
	wget download.sigsolucoes.net.br/produtos/crss/PDV/sigpdv_$versaopdv.tar.gz
	cp sigpdv_$versaopdv.tar.gz /usr/local/
	cd /usr/local/
	tar xfvz sigpdv_$versaopdv.tar.gz
	rm -rf sigpdv_$versaopdv.tar.gz
	chown caixa:caixa /usr/local/sigpdv/ -R

	# Bloqueando Atualização dos Pacotes Necessários para o SigFrente
	apt-mark hold python-sqlalchemy
	apt-mark hold python-sqlalchemy-doc
	apt-mark hold python-sqlalchemy-ext
	apt-mark hold python-elixir
	apt-mark hold python-serial

	# Criando Link Simbólico da SigPdv

	ln -s /usr/local/sigpdv /usr/local/lib/python2.7/dist-packages/sigpdv

	# Criando Atalho Desktop
	if [ -e /home/caixa/ ];then
		cp /usr/share/applications/SigPDV.desktop /home/caixa/Área\ de\ Trabalho/ && chmod 777 /home/caixa/Área\ de\ Trabalho/SigPDV.desktop
		cp /usr/share/applications/PdvConfig.desktop /home/caixa/Área\ de\ Trabalho/ && chmod 777 /home/caixa/Área\ de\ Trabalho/PdvConfig.desktop
		cp /usr/share/applications/terminator.desktop /home/caixa/Área\ de\ Trabalho/ && chmod 777 /home/caixa/Área\ de\ Trabalho/terminator.desktop
	elif [ -e /home/sig/ ];then
		cp /usr/share/applications/SigPDV.desktop /home/sig/Área\ de\ Trabalho/ && chmod 777 /home/sig/Área\ de\ Trabalho/SigPDV.desktop
		cp /usr/share/applications/PdvConfig.desktop /home/sig/Área\ de\ Trabalho/ && chmod 777 /home/sig/Área\ de\ Trabalho/PdvConfig.desktop
		cp /usr/share/applications/terminator.desktop /home/sig/Área\ de\ Trabalho/ && chmod 777 /home/sig/Área\ de\ Trabalho/terminator.desktop
	else
		echo -e "╔════════════════════════════════════════════╗"
		echo -e "║ Não foi possível criar atalhos no Desktop! ║"
		echo -e "╚════════════════════════════════════════════╝"
		sleep 3
	fi

	# Criando Arquivos Necessários

	cd /var/cache
	mkdir ChavesCliSiTef
	chmod 1777 ChavesCliSiTef/

	if [[ -e /recebe/ ]];then
		echo " "
	else
		cd /
		mkdir recebe
		chmod 777 recebe/ -R
	fi

	echo /usr/local/sigpdv/sigtef/lib_x86_64/ >> /etc/ld.so.conf
	ldconfig
	echo UseDNS no >> /etc/ssh/sshd_config

	# Criando Arquivo de Configuração para "TMP"
	cd /etc/tmpfiles.d/
	touch clisitef.conf
	echo "L /tmp/ChavesCliSiTef 1777 - - - /var/cache/ChavesCliSiTef" >> clisitef.conf

	# Alterando o Network-Time do Sistema
	timedatectl set-local-rtc 0
	timedatectl set-timezone America/Sao_Paulo
	timedatectl set-ntp true

	# Adicionando usuário caixa ou sig ao grupo dialout
	if [ -e /home/caixa/ ];then
		adduser caixa dialout
		sudo usermod -aG dialout caixa
	elif [ -e /home/sig/ ];then
		adduser sig dialout
		sudo usermod -aG dialout sig
	else
		echo -e "╔════════════════════════════════════════════════════════════════════╗"
		echo -e "║ Não foi possível adicionar usuários caixa ou sig no grupo dialout! ║"
		echo -e "╚════════════════════════════════════════════════════════════════════╝"
		sleep 3
	fi

	echo -e "╔════════════════════════════════════════════════════════════════╗"
	echo -e "║ Baixando outros scripts necessários para a instalação do caixa ║"
	echo -e "╚════════════════════════════════════════════════════════════════╝"
	sleep 3
	cd /recebe/
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/rustdesk_install.sh
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/tef_install_v2.1.3.sh
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/bkp.sh
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/cria_recebe.sh
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/dl_sigimages.sh
	wget http://download.sigsolucoes.net.br/produtos/crss/txt/start-sigpdv

	cd /tmp/install_sigfrente/

	mv start-sigpdv /usr/bin/
	mv sig.jpg /usr/share/xfce4/backdrops/ && chmod 777 /usr/share/xfce4/backdrops/sig.jpg
	mv menu-sig.png /usr/share/pixmaps/ && chmod 777 /usr/share/pixmaps/menu-sig.png

	clear
	echo "╔══════════════════════╗"
	echo "║ INSTALAÇÃO CONCLUIDA ║"
	echo "╚══════════════════════╝"
	if [[ $sigutilsni == '1' ]];then
		echo "╔═════════════OBS=════════════╗"
		echo "║ SigUtils não foi instalado! ║"
		echo "╚═════════════════════════════╝"
	fi
	exit

else
	clear
	echo " "
    echo "╔══════════════════════════════════════════════╗"
    echo "║ Execute este aplicatvo como Root, por favor. ║"
    echo "╚══════════════════════════════════════════════╝"
    exit
fi
sleep 4
}

funcrestauraounaopdv(){
    echo "╔═════════════════════════════════════════╗"
    echo "║ Deseja Restaurar a pasta SigPDV antiga? ║"
    echo "║                (1) = SIM.               ║"
    echo "║                (2) = NÃO.               ║"
    echo "╚═════════════════════════════════════════╝"
    read -p "R: " restauraounaopdv
}

naorestaurapdv(){
    cd /recebe/bkpcx$cx/
    wget download.sigsolucoes.net.br/produtos/crss/txt/start-sigpdv
    cp start-sigpdv /usr/bin/
    cat /usr/bin/start-sigpdv
    sleep 3
    
    cd /recebe/bkpcx$cx/
    cp pdvconfig.cfg /usr/local/sigpdv/
    cp CliSiTef.ini /usr/local/sigpdv/
    
    cd /recebe/bkpcx$cx/
    wget download.sigsolucoes.net.br/produtos/releases/python-nfe/4.51/nfe-4.51.16.tar.gz
    tar xfvz nfe-4.51.16.tar.gz
    cd /recebe/bkpcx$cx/nfe-4.51.16
    sudo python setup.py install
    cd /recebe/bkpcx$cx/
    rm -rf nfe-4.51.16/
}

restaurapdv(){
    cd /usr/local/
    tar cfvz sigpdv_newinstall_$cx.tar.gz sigpdv
    cp sigpdv_newinstall_$cx.tar.gz /recebe/bkpcx$cx

    cd /recebe/bkpcx$cx/
    cp sigpdv_$cx.tar.gz /usr/local/
    sleep 3

    cd /usr/local/
    rm -rf sigpdv/
    tar xfvz sigpdv_$cx.tar.gz
    sleep 3

    cd /recebe/bkpcx$cx/
    wget download.sigsolucoes.net.br/produtos/crss/txt/start-sigpdv
    cp start-sigpdv /usr/bin/
    cat /usr/bin/start-sigpdv
    sleep 3

    cd /recebe/bkpcx$cx/
    wget download.sigsolucoes.net.br/produtos/releases/python-nfe/4.51/nfe-4.51.16.tar.gz
    tar xfvz nfe-4.51.16.tar.gz
    cd /recebe/bkpcx$cx/nfe-4.51.16
    sudo python setup.py install
    cd /recebe/bkpcx$cx/
    rm -rf nfe-4.51.16/
}

ini_restuar(){

    if [ -e /recebe/ ];then
        funcrestauraounaopdv
        if [[ $restauraounaopdv == 1 ]];then
            restaurapdv
        elif [[ $restauraounaopdv == 2 ]];then
            naorestaurapdv
        else
            echo "Opção errada! Tente novamente!"
            echo " "
            echo " "
            funcrestauraounaopdv
        fi
    fi

}

instalar_sigfrente(){
    echo "╔═════════════════════════════════════╗"
    echo "║    Deseja instalar o SigFrente?     ║"
    echo "║                                     ║"
    echo "║           Digite 1 (Sim)            ║"
    echo "║           Digite 2 (Não)            ║"
    echo "╚═════════════════════════════════════╝"

    read -p "R: " sigfrente
    case "$sigfrente" in 1 ) echo "OK!"
    installpdv18
    ;; 2 ) echo "OK!"
    ini_restuar
    ;; * ) clear
    echo "Opção errada!"
    echo " "
    instalar_sigfrente ;; esac
}

if [[ $user == "root" ]];then

    echo "╔════════════════════════════╗"
    echo "║  O que voce deseja fazer?  ║"
    echo "║                            ║"
    echo "║  (1) - Backup do Caixa.    ║"
    echo "║  (2) - Restaurar Caixa.    ║"
    echo "╚════════════════════════════╝"
    read -p "R: " bkprest
    case "$bkprest" in 1 ) echo "OK!" ;; 2 ) echo "OK!" ;; * ) clear
    erro_opcao ;; esac

    echo "╔═══════════════════════════════════════════╗"
    echo "║ O computador é Caixa ou Supervisor/Caixa? ║"
    echo "║                                           ║"
    echo "║          (1) Caixa - PDV somente          ║"
    echo "║          (2) Caixa e Supervisor           ║"
    echo "╚═══════════════════════════════════════════╝"
    read -p "R: " pdvousup
    case "$pdvousup" in 1 ) echo "OK!" ;; 2 ) echo "OK!" ;; * ) clear
    erro_opcao ;; esac

    read -p "1) O PDV tem TEF da SkyTEF? (s/n): " skytef
    case "$skytef" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "2) O PDV tem scanntech? (s/n): " scanntech
    case "$scanntech" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "3) O PDV tem a pasta /backup? (s/n): " backup
    case "$backup" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "4) O PDV tem OpeneERP instalado? (s/n): " openerp
    case "$openerp" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "5) O PDV tem arquivo rc.local com algum tipo de configuração? (s/n): " rclocal
    case "$rclocal" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "6) O PDV possui algum tipo de configuração feita no arquivo crontab? (s/n): " crontab
    case "$crontab" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "7) O PDV possui algum tipo de configura SAMBA feita no arquivo smb.conf? (s/n): " smbconf
    case "$smbconf" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac
    read -p "8) O PDV é Supervisor de alguma loja do Santa Helena? (s/n): " shfrente
    case "$shfrente" in s ) echo "OK!" ;; n ) echo "OK!" ;; * ) clear
        erro_opcao ;; esac

    if [[ $bkprest == 1 ]];then # Fazendo backup do caixa
        echo "╔════════════════════════════════════════╗"
        echo "║ Iniciando processo de backup do caixa! ║"
        echo "╚════════════════════════════════════════╝"
        sleep 1
        echo "╔══════════════════════════════╗"
        echo "║ Verificando numero do caixa! ║"
        echo "╚══════════════════════════════╝"
        sleep 2
        cat /usr/local/sigpdv/pdvconfig.cfg | grep caixa
        echo "╔═══════════════════════════╗"
        echo "║ Digite o numero do caixa! ║"
        echo "╚═══════════════════════════╝"
        read -p "R: " cx

        lerpfvcfg

        psql -U postgres -l

        if [[ $pdvousup == 1 ]];then #caixa
            read -p "Qual o nome do banco do Caixa $cx para backup? R: " bpdv
        elif [[ $pdvousup == 2 ]];then #caixa e supervisor
            read -p "Qual o nome do banco do Caixa $cx para backup? R: " bpdv
            read -p "Qual o nome do banco do Supervisor para backup? R: " spdv
        else
            erro_opcao
        fi

        echo " "
        echo "╔═════════════════════════════════╗"
        echo "║ Fazendo backup da pasta sigpdv. ║"
        echo "╚═════════════════════════════════╝"
        echo " "
        sleep 3

        if [[ -e /recebe/ ]];then
            echo " "
            echo "╔════════════════════════════════════════════╗"
            echo "║ Pasta Recebe existe! Continuando processo. ║"
            echo "╚════════════════════════════════════════════╝"
            echo " "
            sleep 2
            echo " "
            echo "╔═══════════════════╗"
            echo "║ Dando permissões. ║"
            echo "╚═══════════════════╝"
            echo " "
            sleep 2
            mkdir /recebe/bkpcx$cx/
            chmod 777 /recebe/ -R
            chown caixa:caixa /recebe/ -R
        else
            echo " "
            echo "╔═════════════════════════════════════════╗"
            echo "║ Pasta Recebe não existe. Criando pasta. ║"
            echo "╚═════════════════════════════════════════╝"
            echo " "
            sleep 2
            mkdir /recebe/
            mkdir /recebe/bkpcx$cx/
            echo " "
            echo "╔═══════════════════╗"
            echo "║ Dando permissões. ║"
            echo "╚═══════════════════╝"
            echo " "
            sleep 2
            chmod 777 /recebe/ -R
            chown caixa:caixa /recebe/ -R
        fi
	
        cd /usr/local/
        tar cfvz sigpdv_$cx.tar.gz sigpdv
        cp sigpdv_$cx.tar.gz /recebe/bkpcx$cx
        cd /usr/local/sigpdv/
        cp pdvconfig.cfg /recebe/bkpcx$cx/
        cp CliSiTef.ini /recebe/bkpcx$cx/

        if [[ $skytef == "s" ]];then
            if [[ -e /etc/wnbtlscli/registry ]];then
                cp -v /etc/wnbtlscli/registry /recebe/bkpcx$cx/
            else
                echo "╔═════════════════════════════════════════╗"
                echo "║ O aquivo 'registry' não foi encontrado! ║"
                echo "╚═════════════════════════════════════════╝"
                sleep 3
            fi
        fi

        if [[ $scanntech == "s" ]];then
            if [[ -e /usr/local/scanntech/ ]];then
                echo "╔═════════════════════════════════════╗"
                echo "║ Gerando tar.gz da pasta scanntech.  ║"
                echo "║ Isso pode demorar muito, dependendo ║"
                echo "║ do tamanho e quantidade das pastas. ║"
                echo "╚═════════════════════════════════════╝"

                sleep 4
                cd /usr/local/scanntech/
                cp -r agente/ /recebe/
                rm -rf agente/
                cd /usr/local/
                tar cfvz scanntech_$cx.tar.gz scanntech/
                cp -v scanntech_$cx.tar.gz /recebe/bkpcx$cx/
                cd /recebe/
                cp -r -v agente/ /usr/local/scanntech/

                echo "╔══════════════════════════════════════╗"
                echo "║     Finalizado criação do tar.gz     ║"
                echo "║        da pasta do scanntech.        ║"
                echo "╚══════════════════════════════════════╝"
                sleep 2
            else
                echo "A pasta 'scanntech' não foi encontrada!"
                sleep 3
            fi
        fi

        if [[ $backup == "s" ]]; then
            if [[ -e /backup/ ]];then
                echo "╔═════════════════════════════════════╗"
                echo "║   Gerando tar.gz da pasta backup.   ║"
                echo "║ Isso pode demorar muito, dependendo ║"
                echo "║ do tamanho e quantidade das pastas. ║"
                echo "╚═════════════════════════════════════╝"
                sleep 4
                cd /
                tar cfvz backup_$cx.tar.gz /backup
                cp -v backup_$cx.tar.gz /recebe/bkpcx$cx/
                echo "╔══════════════════════════════════════╗"
                echo "║     Finalizado criação do tar.gz     ║"
                echo "║          da pasta do backup.         ║"
                echo "╚══════════════════════════════════════╝"
                sleep 2
            else
                echo "A pasta /backup não foi encontrada!"
                sleep 3
            fi
        fi

        if [[ $openerp == "s" ]];then
            if [[ -e /etc/openerp-server.conf ]];then
                echo "Salvando openerp-server.conf."
                sleep 2
                cp -v /etc/openerp-server.conf /recebe/bkpcx$cx/
            else
                echo "O arquivo openerp-server.conf não foi encontrado!"
                sleep 3
            fi
            if [[ -e /usr/local/sigerp ]];then
                echo "Salvando pasta 'sigerp'."
                sleep 3
                cd /usr/local/
                tar cfvz sigerp_$cx.tar.gz sigerp/
                cp -v sigerp_$cx.tar.gz /recebe/bkpcx$cx/
            else
                echo "A pasta sigerp não foi encontrada!"
                sleep 3
            fi
        fi

        if [[ $rclocal == "s" ]];then
            if [[ -e /etc/rc.local ]];then
                echo "Sanvando arquivo rc.local."
                sleep 2
                cp -v /etc/rc.local /recebe/bkpcx$cx/
            else
                echo "O arquivo rc.local não foi encontrado!"
                sleep 3
            fi
        fi

        if [[ $crontab == "s" ]];then
            if [[ -e /etc/crontab ]];then
                echo "Salvando arquivo crontab!"
                sleep 2
                cp -v /etc/crontab /recebe/bkpcx$cx/
            else
                echo "O arquivo 'crontab' não foi encontrado!"
                sleep 3
            fi
        fi

        if [[ $smbconf == "s" ]];then
            if [[ -e /etc/samba/smb.conf ]];then
                echo "Salvando arquivo de configuração do Samba."
                cp -v /etc/samba/smb.conf /recebe/bkpcx$cx/
            else
                echo "O arquivo 'smb.conf' não foi encontrado!"
                sleep 3
            fi
        fi

        if [[ $stahelenafrente == "s" ]];then
            if [[ -e /etc/init.d/frente ]];then
                echo "Salvando arquivo frente do Supervisor do Santa Helena."
                sleep 2
                cp -v /etc/init.d/frente /recebe/bkpcx$cx/
            else
                echo "O arquivo 'frente' não foi encontrado!"
                sleep 3
            fi
        fi

        lerpfvcfg

        if [[ $pdvousup == 1 ]];then #caixa
            echo " "
            echo "Criando dump sigpdv. . ."
            echo " "
            sleep 3

            pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx$cx/sigpdv_$cx.dump $bpdv

        elif [[ $pdvousup == 2 ]];then #caixa e supervisor
            echo " "
            echo "Criando dump sigpdv. . ."
            echo " "
            sleep 3

            pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx$cx/sigpdv_$cx.dump $bpdv

            lerpfvcfg
            echo " "
            echo "Criando dump do supervisor. . ."
            echo " "
            sleep 3

            pg_dump --host localhost --port 5432 --username "openerp" --role "openerp" --format custom --blobs --verbose --file /recebe/bkpcx$cx/$spdv.$cx.dump $spdv

        else
            erro_opcao
        fi

        echo " "
        echo "Arquivos salvos na pasta de /recebe/bkpcx$cx:"
        echo " "
        ls -lha /recebe/bkpcx$cx/
        sleep 3

        fim

    elif [[ $bkprest == 2 ]];then # Restaurando backup do caixa!!

        echo "Iniciando processo de restauração do caixa."
        sleep 3

        read -p "Digite o numero do caixa: " cx
        sleep 2

        if [[ -e /recebe ]];then
            echo "Pasta Recebe existe! Continuando processo."
            if [[ -e /recebe/bkpcx$cx ]];then
                echo "Pasta Backup$cx encontrada!"
                chmod 777 /recebe/ -R
                chown caixa:caixa /recebe/ -R
            else
                mkdir /recebe/bkpcx$cx/
                chmod 777 /recebe/ -R
                chown caixa:caixa /recebe/ -R
            fi
        else
            mkdir /recebe/
            mkdir /recebe/bkpcx$cx/
            chmod 777 /recebe/ -R
            chown caixa:caixa /recebe/ -R
        fi

        instalar_sigfrente

        if [[ $pdvousup == 1 ]];then #Somente Caixa

            if [[ -e /etc/postgresql/10/main/ ]];then
                echo "Postresql 10 instalado!!"
                echo "Removendo versão antiga e instalando versão nova!"
                sleep 3
                sudo apt --purge remove postgresql-10 -y
            fi
            if [[ -e /etc/postgresql/13/main/ ]];then
                echo "Postresql 13 instalado!"
                sleep 3
            else
                #sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
                sudo sh -c 'echo "deb https://apt-archive.postgresql.org/pub/repos/apt bionic-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
                wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
                sudo apt update
                sudo apt -y install postgresql-13 postgresql-client-13
            fi
            if [[ -e /etc/postgresql/15/main/ ]];then
                sudo apt --purge remove postgresql-15 -y
            fi
        fi

        if [[ $pdvousup == 2 ]];then
            read -p "Qual o nome do banco do Supervisor à ser restaurado?: " spdv

            read -p  "Deseja instalar o Postgresql atualizado?: " installpostgres
            echo "╔════════════════════════════════════╗"
            echo "║           Digite (1) Sim           ║"
            echo "║           Digite (2) Não           ║"
            echo "╚════════════════════════════════════╝"

            if [[ installpostgres == 1 ]];then
            echo "Salvando base de dados do caixa e supervisor antes de atualizar o Postgresql!"
            sleep 3
            #melhor prevenir do que remediar!
            lerpfvcfg
            pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx$cx/sigpdv_$cx.dump $bpdv
            pg_dump --host localhost --port 5432 --username "openerp" --role "openerp" --format custom --blobs --verbose --file /recebe/bkpcx$cx/$spdv.$cx.dump $spdv
                if [[ -e /etc/postgresql/10/main/ ]];then
                    echo "Postgresql 10 instalado!!"
                    echo "Removendo versão antiga e instalando versão nova!"
                    sleep 3
                    sudo apt --purge remove postgresql-10 -y
                fi
                if [[ -e /etc/postgresql/13/main/ ]];then
                    echo "Postgresql 13 instalado!"
                    sleep 3
                else
                    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
                    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
                    sudo apt update
                    sudo apt -y install postgresql-13 postgresql-client-13
                fi
                if [[ -e /etc/postgresql/15/main/ ]];then
                    sudo apt --purge remove postgresql-15 -y
                fi
            elif [[ installpostgres == 2 ]];then
                echo "Continuando instalação"
                sleep 3
            else
                erro_opcao_continuar
            fi
        fi
        #Aqui estão os arquivos importantes para funcionamento do Computador.

        if [[ $skytef == "s" ]];then
            if [[ -e /etc/wnbtlscli/ ]];then
                echo "O SkyTEF já se econtra instalado. Veja se ele está funcionando normalmente."
                sleep 3
            else
                echo "O SkyTEF não está instalado. Intale-o!"
                echo "Use as informações do arquivo registry para registar o caixa novamente."
                sleep 4
            fi
        fi

        if [[ $scanntech == "s" ]];then
            echo "Verificando se o scanntech está instalado:"
            sleep 2
            if [[ -e /usr/local/scanntech/ ]];then
                cd /recebe/bkpcx$cx/
                cp -v /recebe/bkpcx$cx/scanntech_$cx.tar.gz /usr/local/
                cd /usr/local/
                tar xfvz scanntech_$cx.tar.gz scanntech/
            else
                echo "O scanntech não está instalado. Instale ele, depois descompacte o backup."
                sleep 3
            fi
        fi

        if [[ $backup == "s" ]];then
            if [ -e /recebe/bkpcx$cx/backup_$cx.tar.gz ];then
                echo "Voltando pasta de backup para seu devido lugar."
                sleep 3
                cp -r /recebe/bkpcx$cx/backup_$cx.tar.gz /
                cd /
                tar xfvz backup_$cx.tar.gz
            else
                echo "Não foi possível encontrar o arquivo tar da pasta backup."
                sleep 3
            fi
        fi

        if [[ $openerp == "s" ]];then
            if [[ -e /usr/local/sigerp/ ]];then
                echo "Copiando arquivos OpenERP para seu devido lugar."
                sleep 3
                cp -v /recebe/bkpcx$cx/openerp-server.conf /etc/
                cd /usr/local/
                rm -rf sigerp/
                cp -v /recebe/bkpcx$cx/sigerp_$cx.tar.gz /usr/local/
                tar xfvz sigerp_$cx.tar.gz
            else
                echo "O OpenERP e o SigERP não estão instalados. Instale-os!!"
                sleep 3
            fi
        fi

        if [[ $rclocal == "s" ]];then
            if [[ -e /recebe/bkpcx$cx/rc.local ]];then
                echo "Copiando rc.local para seu devido local."
                sleep 2
                cp -v /recebe/bkpcx$cx/rc.local /etc/
            else
                echo "O arquivo rc.local não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $crontab == "s" ]];then
            if [[ -e /recebe/bkpcx$cx/crontab ]];then
                echo "Copiando crontab para seu devido local."
                sleep 2
                cp -v /recebe/bkpcx$cx/crontab /etc/
            else
                echo "O arquivo crontab não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $smbconf == "s" ]];then
            if [[ -e /recebe/bkpcx$cx/smb.conf ]];then
                echo "Copiando smb.conf para seu devido local."
                sleep 2
            else
                echo "O arquivo smb.conf não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $stahelenafrente == "s" ]];then
            if [ -e /recebe/bkpcx$cx/frente ];then
                echo "Copiando arquivo 'frente', usado pelo Fred, para envio de carga aos caixas."
                sleep 3
                cp -v /recebe/bkpcx$cx/frente /etc/init.d/
            else
                echo "O arquivo 'frente' não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $pdvousup == 1 ]];then
            echo " "
            echo "Subindo base sigpdv do caixa $cx. . ."
            echo " "
            sleep 3
            lerpfvcfg
            sleep 3

            pg_restore --host localhost --port 5432 --username "postgres" --role "postgres" --dbname sigpdv --verbose /recebe/bkpcx$cx/sigpdv_$cx.dump

        elif [[ $pdvousup == 2 ]];then
            echo " "
            echo "Subindo base sigpdv do caixa $cx. . ."
            echo " "
            sleep 3
            lerpfvcfg
            sleep 3

            pg_restore --host localhost --port 5432 --username "postgres" --role "postgres" --dbname sigpdv --verbose /recebe/bkpcx$cx/sigpdv_$cx.dump

            echo " "
            echo "Criando dump do supervisor. . ."
            echo " "
            sleep 3
            lerpfvcfg
            sleep 3

            psql -U postgres -l

            pg_restore --host localhost --port 5432 --username "openerp" --role "openerp" --dbname $spdv --verbose /recebe/bkpcx$cx/$spdv.$cx.dump

        else
            erro_opcao
            sleep 4
        fi
        fim
    else
        clear
        erro_opcao
        exit
    fi
else
    clear
    echo " "
    echo " "
    echo "╔══════════════════════════════════════════════════╗"
    echo "║Execute este aplicatvo em usuário Root, por favor.║"
    echo "╚══════════════════════════════════════════════════╝"
    exit
fi

#pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx1/sigpdv.dump sigpdv
#pg_dump --host localhost --port 5432 --username "openerp" --role "openerp" --format custom --blobs --verbose --file /recebe/bkpcx1/supervisor.dump supervisor

#pg_restore --host localhost --port 5432 --username "postgres" --role "postgres" --dbname sigpdv --verbose /recebe/bkpcx1/sigpdv.dump
#pg_restore --host localhost --port 5432 --username "openerp" --role "openerp" --dbname supervisor --verbose /recebe/bkpcx1/supervisor.dump


