#!/bin/bash

set -eu

fmsi=""
doforce=""

while [ -n "${1:-}" ]
do
	case "$1" in
		-f) doforce="1" ;;
		*)  fmsi="$1" ;;
	esac
	shift
done

if [ "$EUID" -eq 0 ]
then
	echo "Этот скрипт нельзя запускать от root."
	echo "Запустите его от пользователя, который будет рабоать в Компас 3D."
	exit 1
fi

export WINEPREFIX="$HOME/.wine-kompas"

echo "Скрипт настройки МОС 12 для установки в wine Компас 3D от Аскон."
echo -e 'Если настройка будет произведена правильно, то Вы увидите сообщение "\033[0;1;32mНастройка wine для Компас 3D произведена успешно!\033[0m" в самом конце.\nЕсли Вы не увидели в конце такую надпись, значит что-то пошло не так.\nПопробуйте перезагрузиться и перезапустить скрипт.'
echo ""
if [ -z $doforce ]
then
	echo "Нажмите Enter, чтобы продолжить..."
	read
fi

echo "========="
echo "Перед запуском скрипта необходимо установить все обновления ОС."
sleep 2
update_applet.helper refresh
update_applet.helper update
echo "========="
echo "Обновление прошло успешно."
echo "========="
echo "Удаляем предыдущие настройки wine..."
rm -rf "$WINEPREFIX"
echo "========="
echo "Начинаем настройку wine."
echo -e "\033[0;1;31mЭто процесс может занять очень много времени. Наберитесь терпения и дождитесь его завершения.\033[0m"
echo ""
if [ -z $doforce ]
then
	echo "Нажмите Enter, чтобы продолжить..."
	read
fi
echo "========="

if [ -n $doforce ]
then
	WINEARCH=win64 WINEDLLOVERRIDES="mscoree,mshtml=" wineboot -u
else
	WINEARCH=win64 wineboot
fi

set +e
for i in dotnet48 d3dcompiler_47 jet40 msxml3 msxml4 msxml6 corefonts riched20 vcrun2019 vcrun2015 vb6run mfc140
do
	winetricks --force -q ${i}
done
set -e

wine64 reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v "*msxml3" /t REG_SZ /d native,builtin /f
wine64 reg add 'HKCU\SOFTWARE\Microsoft\Avalon.Graphics' /v DisableHWAcceleration /t REG_DWORD /d 1 /f
cp "$WINEPREFIX"/drive_c/windows/system32/rgb9rast_2.dll "$WINEPREFIX"/drive_c/windows/system32/rgb9rast.dll

winecfg -v win10

sleep 2
echo -e "\033[0;1;32m Настройка wine для Компас 3D произведена успешно!\033[0m"
echo "========="

echo "Приступаем к установке приложения Компас 3D"

if [ -z "$fmsi" ]
then
	echo "Необходимо указать установочный файл Компас 3D (KOMPAS_3.MSI или KOMPAS-3D_v21_Study_x64.msi или подобный)."
	if [ -z $doforce ]
	then
		echo -e "\033[0;1;32mНажмите Enter для открытия диалога выбора файла:\033[0m"
		read
	fi
	fmsi="$(kdialog --getopenfilename)"
fi

if test -f "$fmsi"
then
	kdir=$(dirname "$fmsi")
	fext=${fmsi##*.}
	pushd "$kdir"
	if [ "$fext" = "iso" ]
	then
		7z x "$fmsi" -okextr
		cd kextr/Modules
		fmsi=$(realpath KOMPAS-3D*.msi)
	fi
	popd
	wine64 "$fmsi"
	# eterbug # 15127
	# eterbug # 16763
	kompas_inst_dir="$(echo "$WINEPREFIX/drive_c/Program Files/ASCON"/KOMPAS-3D*)"
	kompas_version="$(basename "$kompas_inst_dir")"
	if [ -d "$kompas_inst_dir" ]; then
		if [ -s "$kompas_inst_dir/Libs/PARTLib/Server/PARTLibServer.dll" ]; then
			# Регистрация partlibserver до версии v22
			$WINE reg add 'HKCR\CLSID\{1E0D0848-957C-4C84-AD2D-60B7E1FA44FD}\InprocServer32'  /t REG_SZ /d "C:\\Program Files\\ASCON\\$kompas_version\\Libs\\PARTLib\\Server\\PARTLibServer.dll" /f
		elif [ -s "$kompas_inst_dir/Libs/PolynomLib/Bin/partlibinv/Server/PARTLibServerInv.dll" ]; then
			# Регистрация с версии v22
			$WINE regsvr32 "C:\\Program Files\\ASCON\\$kompas_version\\Libs\\PolynomLib\\Bin\\partlibinv\\Server\PARTLibServerInv.dll"
		fi
	else
		fatal "Не удалось найти каталог с КОМПАС-3D в \"Program Files\"."
	fi
	echo -e "\033[0;1;32m Компас 3D успешно установлен!\033[0m"
else
	echo "Указанного файла не существует."
fi
