#!/bin/bash
# ┌──────────────────────────────────────────────────────────┐
# │ Author: Bruno.Tosta                                      │
# │ Desc: Instalar SigERP / SigPDV                           │
# └───────────────────────────────────────────────────── 2.3 ┘
VERSAO="2.3"
SISTEMA=$(lsb_release -cs) USUARIO=$(id -un) ROOT=$(id -u)
REPOSITORIO='download.sigsolucoes.net.br/public/Tosta/ERP'
Configurar(){
[ ! $SISTEMA = 'jammy' ] && MenuStatus 'NÃO HÁ'
case "$1" in
	1) source <(wget -qO- "$REPOSITORIO/instaladores/controle/config");;
	2) source <(wget -qO- "$REPOSITORIO/instaladores/controle/config");;
esac
}
# ┌──────────────────────────────────────────────────────────┐
# └─────────────────────────────────────────────────{ MENUS }┘
MenuExecutar(){
	clear; read -p "
	┌─ $SISTEMA ──────────────────────────────────────┐
	│                                              │
	│   1 │ Instalar o SigERP                      │
	│   2 │ Instalar o SigPDV                      │
	│   0 │ Sair                                   │
	│                                              │
	└───────────────────────────────────────── 2.3 ┘
	Escolha uma opção: " EXECUTAR && Executavel
}
MenuStatus(){
	clear; echo "
	┌──────────────────────────────────────────────┐
	│                                              │
	│                  $1	               │
	│                                              │
	└──────────────────────────────────────────────┘
	"; sleep 1
}
# ┌──────────────────────────────────────────────────────────┐
# └─────────────────────────────────────────────────{ OPCAO }┘
Executavel(){
case "$EXECUTAR" in
	1|2) Configurar "$EXECUTAR"; MenuStatus "$ATUALIZANDO"; Instalar;;
	0)	MenuStatus 'SAINDO'; exit	;;
	*)	MenuStatus 'INVALIDO'; MenuExecutar
esac
}
Instalar(){
	InstalarPyEnv
	Ambiente
	InstalarPostgres
	InstalarPGAdmin4
	Pacotes
	BuscaArquivo
	Finalizando
}
# ┌──────────────────────────────────────────────────────────┐
# └──────────────────────────────────────────────{ AMBIENTE }┘
InstalarPyEnv(){
	[ ! -x "/home/$USUARIO/.pyenv" ] && {
	(sudo apt update; sudo apt install -y git make build-essential libssl-dev \
	zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
	libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev) && \
	(curl https://pyenv.run | bash) && {
		echo "$CONFIG" >> ~/.bashrc
		eval "$(cat ~/.bashrc | tail -n +10)"
		pyenv install 2.7.18
		pyenv virtualenv 2.7.18 sigsolucoes
	}
} || eval "$(cat ~/.bashrc | tail -n +10)"
}
Ambiente(){

	(sudo apt install -y ssh net-tools terminator vim gcc locate aptitude lbzip2 python3-pip libevent-dev \
	mousepad libxslt1-dev libldap2-dev libsasl2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \
	system-config-printer libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev \
	libxcb1-dev libpq-dev swig libcups2-dev sqlite3 ncurses-dev libmysqlclient-dev \
	default-libmysqlclient-dev htop atop iotop pyqt5-dev libxkbcommon-x11-0 \
	libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \
	libxcb-render-util0 libxcb-shape0 libxcb-sync1 libxcb-xfixes0 libxrender1 qt5dxcb-plugin)

	export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins

	[ "$ATUALIZANDO" = 'sigerp' ] && {

		sudo wget -qO '/lib/systemd/system/openerp.service' --show-progress "$REPOSITORIO/pacotes/openerp.service"
		sudo sed -i "s/USUARIO/$USUARIO/" /lib/systemd/system/openerp.service

		(cd '/'; sudo wget -qO 'structure.tar.gz' --show-progress "$REPOSITORIO/pacotes/structure.tar.gz"
		sudo tar xfvz 'structure.tar.gz' && sudo chown -R $USUARIO:$USUARIO 'sig' && sudo rm 'structure.tar.gz') && \
		sudo ln -s "/home/$USUARIO/.pyenv" '/sig/.pyenv'
}
}
Pacotes(){
	VerificaATUA
	(pyenv shell sigsolucoes && \
	easy_install egenix-mx-base && \
	sudo wget 'https://raw.githubusercontent.com/paulfitz/mysql-connector-c/master/include/my_config.h' -P '/usr/include/mysql/' && \
	sudo wget -qO '/tmp/INSTALL/requirements' --show-progress "$REPOSITORIO/instaladores/controle/requirements" && \
	pip install -r '/tmp/INSTALL/requirements') && ApagaTemp

	(pyenv shell sigsolucoes && \
	pip uninstall -y mysqlclient
	pip install mysqlclient)
}

# ┌──────────────────────────────────────────────────────────┐
# └──────────────────────────────────────────────{ INSTALAR }┘
VerificaATUA(){
	sudo mkdir -m 777 '/tmp/INSTALL' 2>'/dev/null' && echo 'Pasta de atualização criada!' || echo 'Pasta de atualização já existe!'
}
InstalaArquivo(){
	python 'setup.py' install
}
BuscaArquivo(){
	VerificaATUA
for APLICATIVO in "${PACOTES[@]}"; do
	(pyenv shell sigsolucoes && BaixaArquivo)
done
}
BaixaArquivo(){
	BAIXAR=$(wget -qO- "$REPOSITORIO/instaladores/controle/update" | grep -wi "$APLICATIVO" | cut -d"=" -f2)
	wget -qO "/tmp/INSTALL/$APLICATIVO-$BAIXAR.tar.gz" --show-progress "$REPOSITORIO/$APLICATIVO/$APLICATIVO-$BAIXAR.tar.gz"
	ExtraiArquivo
}
ExtraiArquivo(){
case "$APLICATIVO" in
'sigpdv')		sudo cp "/tmp/INSTALL/$APLICATIVO-$BAIXAR.tar.gz" "$LOCAL/" && \
				(cd "$LOCAL/" && sudo tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" && sudo rm "$APLICATIVO-$BAIXAR.tar.gz") && \
				(VerificaSigEXT && Permissao) && \
				echo "Extração dos arquivos do $APLICATIVO-$BAIXAR efetuada com sucesso!"; sleep 4;;
"sigerp")		sudo cp "/tmp/INSTALL/$APLICATIVO-$BAIXAR.tar.gz" "$LOCAL/" && sudo rm -rf "$LOCAL/7.0" && \
				(cd "$LOCAL/" && sudo tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" && sudo mv "$APLICATIVO" '7.0' && sudo rm "$APLICATIVO-$BAIXAR.tar.gz") && \
				(Permissao) && \
				echo "Extração dos arquivos do $APLICATIVO-$BAIXAR efetuada com sucesso!"; sleep 4
				;;
'kiwi'|'stoqdrivers') (cd '/tmp/INSTALL/' && sudo tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" && sudo mv "/tmp/INSTALL/$APLICATIVO/$APLICATIVO" "$LOCAL/$APLICATIVO") && \
				sudo ln -s "$LOCAL/$APLICATIVO" "/home/$USUARIO/.pyenv/versions/sigsolucoes/lib/python2.7/site-packages/" && \
				echo "Instalação e links $APLICATIVO-$BAIXAR efetuados com sucesso!"; sleep 4
				;;
				*) (cd '/tmp/INSTALL/' && sudo tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" && (cd "$APLICATIVO-$BAIXAR" && InstalaArquivo)) && \
				echo "Instalação do $APLICATIVO-$BAIXAR efetuada com sucesso!"; sleep 4
				;;
esac
}
ApagaTemp(){
	cd '/'; sudo rm -rf '/tmp/INSTALL/' && echo 'Arquivos e pastas temporárias para a atualização deletados'
}
Permissao(){
for PERMISSAO in "${PERMISSOES[@]}"; do
		sudo chmod -R 777 "$PERMISSAO"
done && echo 'Permissões ajustadas!'
}

VerificaSigEXT(){
	echo 'Indo para finalização'
	sudo mkdir -m '755' "$LOCAL/sigext" 2>'/dev/null' && echo 'Pasta do SigEXT criada' || echo 'Pasta do SigEXT já existe'
	sudo wget -qO '/usr/local/sigext/pdvconfig.cfg' --show-progress "$REPOSITORIO/pacotes/pdvconfig.cfg"
	sudo wget -qO '/usr/local/sigext/CliSiTef.ini' --show-progress "$REPOSITORIO/pacotes/CliSiTef.ini"
	ln -s '/usr/local/sigext/pdvconfig.cfg' '/usr/local/sigpdv'
	ln -s '/usr/local/sigext/CliSiTef.ini' '/usr/local/sigpdv'
	ln -s '/usr/local/sigext/CliSiTef.ini' '/usr/local/sigpdv/sigtef/lib_x86_64/producao'
	ln -s '/usr/local/sigext/CliSiTef.ini' '/usr/local/sigpdv/sigtef/lib_x86_64/homologacao'
	ln -s '/usr/local/sigext/CliSiTef.ini' '/usr/local/sigpdv/sigtef/lib_x86_64/lib_ssl_antiga'
	sudo chown -R $USUARIO:$USUARIO "$LOCAL/sigext"
	sudo chmod -R 755 "$LOCAL/sigext"
}
Finalizando(){

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

	sudo adduser "$USUARIO" dialout
	sudo usermod -aG dialout "$USUARIO"

	sudo wget -qO '/usr/share/pixmaps/icon-sig.png' --show-progress "$REPOSITORIO/pacotes/icon.png"


case "$ATUALIZANDO" in
	'sigpdv')
		# Imagem de aplicativo
		sudo wget -qO '/usr/share/xfce4/backdrops/sigpdv.jpg' --show-progress "$REPOSITORIO/pacotes/sigpdv.jpg"
		sudo wget -qO '/usr/share/pixmaps/printer.png' --show-progress "$REPOSITORIO/pacotes/printer.png"
		sudo wget -qO '/usr/share/pixmaps/config.png' --show-progress "$REPOSITORIO/pacotes/config.png"
		sudo wget -qO '/usr/share/pixmaps/comanda.png' --show-progress "$REPOSITORIO/pacotes/comanda.png"
		sudo wget -qO '/usr/share/pixmaps/consulta.png' --show-progress "$REPOSITORIO/pacotes/consulta.png"
		sudo wget -qO '/usr/share/pixmaps/sigpve.png' --show-progress "$REPOSITORIO/pacotes/sigpve.png"

		# Inicializadores
		sudo wget -qO '/usr/bin/start-sigpdv' --show-progress "$REPOSITORIO/pacotes/start-sigpdv" && sudo chmod 777 '/usr/bin/start-sigpdv'
		sudo wget -qO '/usr/bin/start-sigpve' --show-progress "$REPOSITORIO/pacotes/start-sigpve" && sudo chmod 777 '/usr/bin/start-sigpve'
		sudo wget -qO '/usr/bin/start-pdvconfig' --show-progress "$REPOSITORIO/pacotes/start-pdvconfig" && sudo chmod 777 '/usr/bin/start-pdvconfig'
		sudo wget -qO '/usr/bin/start-comanda' --show-progress "$REPOSITORIO/pacotes/start-comanda" && sudo chmod 777 '/usr/bin/start-comanda'
		sudo wget -qO '/usr/bin/start-consulta' --show-progress "$REPOSITORIO/pacotes/start-consulta" && sudo chmod 777 '/usr/bin/start-consulta'

		sudo ln -s '/usr/local/sigpdv' "/home/$USUARIO/.pyenv/versions/sigsolucoes/lib/python2.7/site-packages/"

		# Aplicativo
		sudo wget -qO '/usr/share/applications/sigpdv.desktop' --show-progress "$REPOSITORIO/pacotes/sigpdv.desktop"
		sudo wget -qO '/usr/share/applications/sigpve.desktop' --show-progress "$REPOSITORIO/pacotes/sigpve.desktop"
		sudo wget -qO '/usr/share/applications/consulta.desktop' --show-progress "$REPOSITORIO/pacotes/consulta.desktop"
		sudo wget -qO '/usr/share/applications/Comanda.desktop' --show-progress "$REPOSITORIO/pacotes/comanda.desktop"
		sudo wget -qO '/usr/share/applications/pdvconfig.desktop' --show-progress "$REPOSITORIO/pacotes/pdvconfig.desktop"

		# Atalhos
		sudo cp '/usr/share/applications/sigpdv.desktop' /home/$USUARIO/Área\ de\ Trabalho/ && \
		sudo chown $USUARIO:$USUARIO /home/$USUARIO/Área\ de\ Trabalho/sigpdv.desktop && sudo chmod +x /home/$USUARIO/Área\ de\ Trabalho/sigpdv.desktop

		sudo cp '/usr/share/applications/pdvconfig.desktop' /home/$USUARIO/Área\ de\ Trabalho/ && \
		sudo chown $USUARIO:$USUARIO /home/$USUARIO/Área\ de\ Trabalho/pdvconfig.desktop && sudo chmod +x /home/$USUARIO/Área\ de\ Trabalho/pdvconfig.desktop

		sudo cp '/usr/share/applications/terminator.desktop' /home/$USUARIO/Área\ de\ Trabalho/ && \
		sudo chown $USUARIO:$USUARIO /home/$USUARIO/Área\ de\ Trabalho/terminator.desktop && sudo chmod +x /home/$USUARIO/Área\ de\ Trabalho/terminator.desktop

		sudo cp '/usr/share/applications/pgadmin4.desktop' /home/$USUARIO/Área\ de\ Trabalho/ && \
		sudo chown $USUARIO:$USUARIO /home/$USUARIO/Área\ de\ Trabalho/pgadmin4.desktop && sudo chmod +x /home/$USUARIO/Área\ de\ Trabalho/pgadmin4.desktop

		(cd '/var/cache' && sudo mkdir -m 777 'ChavesCliSiTef')

		sudo mkdir -m 777 '/recebe/'

		echo "/usr/local/sigpdv/sigtef/lib_x86_64/" | sudo tee -a '/etc/ld.so.conf'
		sudo ldconfig
		echo "UseDNS no" | sudo tee -a '/etc/ssh/sshd_config'

		# Criando Arquivo de Configuração para "TMP"
		cd '/etc/tmpfiles.d/'
		sudo touch 'clisitef.conf'
		sudo echo "L /tmp/ChavesCliSiTef 1777 - - - /var/cache/ChavesCliSiTef" | sudo tee -a 'clisitef.conf'
		;;
		'sigerp')
		sudo wget -qO '/usr/share/xfce4/backdrops/sigerp.jpeg' --show-progress "$REPOSITORIO/pacotes/sigerp.jpg"
		sudo systemctl daemon-reload; sleep 4
		sudo systemctl enable openerp.service; sleep 4
		sudo systemctl status openerp; sleep 4
		;;
esac
}
# ┌──────────────────────────────────────────────────────────┐
# └──────────────────────────────────────────────{ POSTGRES }┘
InstalarPostgres(){
	[ ! -d '/etc/postgresql' ] && {
		sudo apt install -fy postgresql-14 && \
		cd '/etc/postgresql/14/main/'

		# Configurações do PostgreSQL
		sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" postgresql.conf
		sudo sed -i "s/port = 5433/port = 5432/" postgresql.conf

		# Permissões de acesso e autenticação
		sudo sed -i "s/127.0.0.1\/32/0.0.0.0\/0/" pg_hba.conf
		sudo sed -i "s/scram-sha-256/trust/" pg_hba.conf
		sudo sed -i "s/md5/trust/" pg_hba.conf
		sudo sed -i "s/peer/trust/" pg_hba.conf

		# Comentando configurações de replicação
		sudo sed -i "s/host    replication     all             0.0.0.0\/0/#host    replication     all             0.0.0.0\/0/" pg_hba.conf
		sudo sed -i "s/host    replication     all             ::1\/128/#host    replication     all             ::1\/128/" pg_hba.conf

		sudo /etc/init.d/postgresql reload
		sudo /etc/init.d/postgresql stop

		echo 'Aguardando 5 segundos'; sleep 5

		sudo /etc/init.d/postgresql start
}
case "$ATUALIZANDO" in
	'sigpdv') sudo createdb -h 'localhost' -U 'postgres' -E 'utf8' 'sigpdv'	;;
	'sigerp') sudo /etc/init.d/postgresql stop
			  sudo /etc/init.d/postgresql start
			  sudo createuser -U postgres --createdb -P openerp				;;
esac

#	[ $SENHA = '0' ] && echo 'não terá' || {
#	PASS=$(openssl rand -base64 12 | sed 's/^/=$/')
#	sudo psql -c "ALTER USER postgres WITH PASSWORD '$PASS'" -d template1
#	echo "$PASS" > '/tmp/senha.txt'
#
#	CRIAR		createdb -h "localhost" -p "5432" -U "openerp" -O "openerp" "$BASE"
#	EXCLUIR		dropdb -h "localhost" -p "5432" -U "openerp" -f --if-exists "$BASE"
#	RESTAURAR	pg_restore -h 'localhost' -p "5432" -U "openerp" -F 'c' --role "openerp" -O -v -d "$BASE" "/tmp/$BASE.dump"
#	LEVANTAR	/sig/scripts/./openerp.sh -uall -d $BASE --stop-after-init
}
InstalarPGAdmin4(){
	[ ! -d '/usr/pgadmin4' ] && {
		sudo apt update
		curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/pgadmin-keyring.gpg
		echo "deb [signed-by=/usr/share/keyrings/pgadmin-keyring.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/jammy pgadmin4 main" | sudo tee /etc/apt/sources.list.d/pgadmin4.list
		sudo apt update
		sudo apt install pgadmin4-desktop -y
}
}
# ┌──────────────────────────────────────────────────────────┐
# └─────────────────────────────────────────────{ PRINCIPAL }┘
LOGFILE="/tmp/${0##*/}".log
exec 1> >(tee -a "$LOGFILE"); exec 2>&1
[ "$ROOT" = '0' ] && MenuStatus 'SEM ROOT' && exit 1 || {
[ -z "$1" ] && {
	MenuExecutar
} || {
while [ -n "$1" ]; do
case "$1" in
	sigerp) Configurar '1'; Instalar		;;
	sigpdv) Configurar '2'; Instalar		;;
	"$1") $1 && exit ;;
	*)  MenuStatus 'INVALIDO'; MenuExecutar	;;
esac
done
}
}
