#!/bin/bash
#sudo sysctl -w kernel.core_pattern="|/usr/bin/tee -a /tmp/core-%e.%p"

DOCKER_IMAGE_NAME="nr-repo.roskazna.ru/nr-plugin"
VERSION="latest"

if [[ $(id -u) == 0 ]]; then
    ERROR_TEXT="Плагин ГИС НР: Запустите программу НЕ под администратором (без sudo)"
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
fi

if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
    ERROR_TEXT="Плагин ГИС НР: Wayland не поддерживается, переключитесь на Xorg. Обратитесь к руководству пользователя для дополнительной информации."
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
fi

if [ -z "$HOME" ]; then
    ERROR_TEXT="Плагин ГИС НР: Переменная среды HOME не установлена."
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
fi

if [ ! -w "$HOME" ]; then
    ERROR_TEXT="Плагин ГИС НР: Домашняя папка $HOME не существует или недоступна для записи."
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
fi

if ! id -nG "$(id -u -n)" | grep -qw "docker"; then
    ERROR_TEXT="Плагин ГИС НР: Текущий пользователь не является членом группы docker. Добавьте пользователя в группу командой 'sudo usermod -aG docker your_user_id'."
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
fi

CSP_LIBS="/opt/cprocsp/lib/amd64/libcsp.so /opt/cprocsp/lib/amd64/libcapi20.so /opt/cprocsp/lib/amd64/libssp.so /opt/cprocsp/lib/amd64/librdrsup.so /opt/cprocsp/lib/amd64/libcpext.so /opt/cprocsp/lib/amd64/libcapi10.so /opt/cprocsp/lib/amd64/libcpcurl.so"
for EACH_LIB in $CSP_LIBS
do
  if [ ! -f $EACH_LIB ] && [ ! -L $EACH_LIB ]; then
    ERROR_TEXT="Плагин ГИС НР: ОШИБКА! КриптоПро CSP не установлен (https://cryptopro.ru/products/csp/downloads#latest_csp50r3_linux)"
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
  fi
done

CADES_LIBS="/opt/cprocsp/lib/amd64/libtspcli.so /opt/cprocsp/lib/amd64/libades-core.so"
for EACH_LIB in $CADES_LIBS
do
  if [ ! -f $EACH_LIB ] && [ ! -L $EACH_LIB ]; then
    ERROR_TEXT="Плагин ГИС НР: ОШИБКА! КриптоПро ЭЦП Browser plug-in не установлен (https://cryptopro.ru/products/cades/downloads)"
    echo $ERROR_TEXT
    zenity --error --no-wrap --text="$ERROR_TEXT"
    exit 1
  fi
done

if [ ! -d $HOME/.nr_plugin/logs ]; then
  mkdir -p $HOME/.nr_plugin/logs
fi

if [ -f "$HOME/.nr_plugin/nr-plugin.pid" ]; then
  echo "Останавливаем Плагин ГИС НР"
  kill -s SIGTERM $(cat $HOME/.nr_plugin/nr-plugin.pid) 2>/dev/null
  sleep 1
  rm $HOME/.nr_plugin/nr-plugin.pid 2>/dev/null
fi

echo Stopping docker containers
docker ps -q --filter name="my-nr-plugin" | xargs -r docker stop

export > $HOME/.nr_plugin/logs/stdout_host.txt
echo "Started: $(date)" | tee -a $HOME/.nr_plugin/logs/stdout_host.txt

if [ -f /etc/timezone ]; then
  TIMEZONE=$(cat /etc/timezone)
else
  TIMEZONE=$(timedatectl | awk '/Time zone:/ {print $3}')
fi

nohup /usr/bin/nr-plugin-helper.sh >> $HOME/.nr_plugin/logs/nr-plugin-helper.txt 2>&1 &
sleep 1
pidof -x -- nr-plugin-helper.sh | tee -a $HOME/.nr_plugin/logs/stdout_host.txt

mkdir /run/user/$(id -u)/media 2>/dev/null

docker run \
  -h $(hostname) \
  --network host \
  -p 9822:9822 \
  --ipc=host \
  -v /usr/share/nr-plugin:/usr/share/nr-plugin \
  -v /dev:/dev \
  -v /tmp:/tmp \
  -v /opt:/opt \
  --mount type=bind,source=/media,target=/media,bind-propagation=slave \
  --mount type=bind,source=/mnt,target=/mnt,bind-propagation=slave \
  -v /var/opt:/var/opt \
  -v $HOME:$HOME \
  -v /run/user/$(id -u)/bus:/run/user/$(id -u)/bus \
  -v /run/user/$(id -u)/dconf:/run/user/$(id -u)/dconf \
  -v /run/user/$(id -u)/media:/run/user/$(id -u)/media \
  -v /etc/passwd:/etc/passwd.host \
  -v /etc/hosts:/etc/hosts \
  -v /etc/opt:/etc/opt \
  -v /etc/udev:/etc/udev \
  -v /usr/lib/pcsc:/usr/lib/pcsc \
  -v /run/pcscd:/run/pcscd \
  -e DISPLAY=$DISPLAY \
  -e TZ=$TIMEZONE \
  -e DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
  -e XDG_RUNTIME_DIR=/run/user/$(id -u) \
  -e HTTP_PROXY=$HTTP_PROXY \
  -e HTTPS_PROXY=$HTTPS_PROXY \
  -e http_proxy=$http_proxy \
  -e https_proxy=$https_proxy \
  -e HOST_USER=$USER \
  -e HOME=$HOME \
  -e HOST_UID=$(id -u) \
  -e HOST_GID=$(id -g) \
  --rm \
  --name my-nr-plugin \
  --security-opt apparmor=unconfined \
  --privileged \
  --pid=host \
  -d \
  $DOCKER_IMAGE_NAME:$VERSION 2>&1 | tee -a $HOME/.nr_plugin/logs/stdout_host.txt
