@echo off
::Под Windows 11 почему-то нужен UTF8
cls

SETLOCAL

chcp 65001 > nul
title Установка приложения SmetaWIZARD v5
::Проверим наличие прав администратора
net session 1> nul 2> nul
if %errorlevel% neq 0 (
	color 47
	echo Для работы скрипта установки приложения требуется его запустить с правами АДМИНИСТРАТОРА
	echo Откройте контекстное меню на файле "%~nx0%" и выполните команду "Запуск от имени администратора"
	echo.
	echo ... Для выхода нажмине ПРОБЕЛ ...
	timeout 10 > nul
	cls
	exit /b -1
)

::TODO: Нужно проверять, что путь не содержит крублых скобок или это нужно экранировать как-то


::Перейдем в каталог с батником
cd /D "%~dp0"

echo ----------------------

:: Предварительные настройки скрипта
set targetApp=%ProgramFiles%\Wizardsoft\SmetaWIZARD5
:: Дальше пути лучше не надо трогать
set destlicsw5=%ProgramData%\Wizardsoft\SmetaWIZARD5\License
set destdata5=%ProgramData%\Wizardsoft\SmetaWIZARD5\Data
set destsettings5=%LocalAppData%\Wizardsoft\SmetaWIZARD5
set desttemplates5=%userprofile%\documents\Wizardsoft\SmetaWIZARD5\Templates

set destlicsw4=%ProgramData%\Wizardsoft\SmetaWIZARD4\License
set destdata4=%ProgramData%\Wizardsoft\SmetaWIZARD4\Data
set destsettings4=%LocalAppData%\Wizardsoft\SmetaWIZARD4
set desttemplates4=%userprofile%%\documents\Wizardsoft\SmetaWIZARD4\Templates


:: Проверка наличия дистрибутивов
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (
	echo Архитектура компьютера "%PROCESSOR_ARCHITECTURE%"
	echo Поиск дистрибутива SmetaWIZARD5 в "%~dp0" для "%PROCESSOR_ARCHITECTURE%" ...
    for %%F in (smetawizard5_*_x86.msi) DO (
		set sw5msi=%~dp0%%%F
		goto info:
    )
	echo Поиск каталога SmetaWIZARD5 в "%~dp0%" для "%PROCESSOR_ARCHITECTURE%" ...
    for /D %%D in (SmetaWIZARD_*_x86) DO (
		set sw5portable=%~dp0%%%D
		goto info:
    )
) else (
	echo Архитектура компьютера "%PROCESSOR_ARCHITECTURE%"
	echo Поиск дистрибутива SmetaWIZARD5 в "%~dp0" для "%PROCESSOR_ARCHITECTURE%" ...
    for %%F in (smetawizard5_*_x64.msi) DO (
		set sw5msi=%~dp0%%%F
		goto info:
    )
	echo Поиск каталога SmetaWIZARD5 в "%~dp0" для "%PROCESSOR_ARCHITECTURE%" ...
    for /D %%D in (SmetaWIZARD_*_x64) DO (
		set sw5portable=%~dp0%%%D
		goto info:
    )
)

:info
if not defined sw5msi if not defined sw5portable (
	echo Не обнаружены дистрибутивы и каталоги с программой.
	echo Установка не возможна
	pause
	exit -1
)
:: Отображение информации об будущих изменениях
echo Будут установленые следующие компоненты:

IF EXIST "%~dp0Drivers\setup.exe" (
	echo * Установка драйверов Guardant
)

if defined sw5portable (
	if exist "%sw5portable%" (
		echo * Копирование %sw5portable% в "%targetapp%"
	)
	if exist data5 (
		echo * Копирование баз SmetaWIZARD5 в "%destdata5%"
	)
	if exist license5 (
		echo * Копирование лицензий SmetaWIZARD5 в "%destlicsw5%"
	)
	if exist "%sw5portable%\UserProfile\settings.app" if not exist "%destsettings5%\settings.app" (
		echo * Копирование настроек пользователя SmetaWIZARD5 в "%destsettings5%\"
	)
	if exist "%sw5portable%\UserTemplates\" (
		echo * Копирование/обновление шаблонов пользователя "%desttemplates5%"
	)
	if exist data4 (
		echo * Копирование баз SmetaWIZARD5 в "%destdata4%"
	)
	if exist license4 (
		echo * Копирование лицензий SmetaWIZARD4 в "%destlicsw4%"
	)
	if exist "%sw5portable%\sw4\templates" (
		echo * Копирование/обновление шаблонов пользователя в "%desttemplates4%"
	)
) else if defined sw5msi (
	echo * Установка "%sw5msi%"
)

echo --------------------
echo Будет произведено копирование приложения на Ваш компьютер.
echo Нажмите ПРОБЕЛ для начала установки или закройте окно, если передумали

timeout /T 30 > nul

:: Начало установки/копирования компонентов
:: ----------------------------------------------------------------------------

IF EXIST "%~dp0Drivers\setup.exe" (
    echo ... Запуск установщика драйверов Guardant
	"%~dp0Drivers\setup.exe"
)


if defined sw5msi (
	echo.
	echo.  ********************************************************************
	echo. * ! Не закрывайте, пожалуйста, данное окно, до окончания установки ! *
	echo. *    Окно будет автоматически закрыто по окончанию всей установки.   *
	echo.  ********************************************************************
	echo.
	echo ... Установка "%sw5msi%"
	call %sw5msi%
) else if defined sw5portable (
	if exist "%targetapp%" (
		echo [!] Программа уже была установлена ранее.
		echo Произойдет удаление старой версии...
		rd /S /Q "%targetapp%"
	)
	echo ... Копирование программы из "%sw5portable%" в "%targetapp%"
	xcopy /S /R /Y "%sw5portable%\*.*" "%targetapp%\"
	if exist "%~dp0\data5" (
		echo ... Копирование баз данных в %destdata5%
		xcopy "%~dp0\data5\*" "%destdata5%\" /S /R /Y
	)
	if exist "%~dp0\license5" (
		echo ... Копирование баз данных в %destlicsw5%
		xcopy "%~dp0\license5\*" "%destlicsw5%\" /S /R /Y
	)
	if exist "%sw5portable%\UserTemplates" (
		echo ... Копирование шаблонов пользователя в %desttemplates5%
		xcopy "%sw5portable%\UserTemplates\*" "%desttemplates5%\" /S /R /Y
	)
	if exist "%sw5portable%\UserProfile\settings.app" if not exist "%destsettings5%\settings.app" (
		echo ... Копирование настроек пользователя SmetaWIZARD5 в "%destsettings5%\"
		xcopy "%sw5portable%\UserProfile\settings.app" "%destsettings5%\"
	)
	if exist "%~dp0\data4" (
		echo ... Копирование баз данных в %destdata4%
		xcopy "%~dp0\data4\*" "%destdata4%\" /S /R /Y
	)
	if exist "%~dp0\license4" (
		echo ... Копирование баз данных в %destlicsw4%
		xcopy "%~dp0\license4\*" "%destlicsw4%\" /S /R /Y
	)
	if exist "%sw5portable%\sw4\templates" (
		echo ... Копирование шаблонов пользователя в %desttemplates4%
		xcopy "%sw5portable%\sw4\templates\*" "%desttemplates4%\" /S /R /Y
	)
	if exist "%targetapp%\sw5.exe" (
		echo ... Создаем ярлык SmetaWIZARD5
		if exist "%USERPROFILE%\Desktop\SmetaWIZARD5.lnk" del "%USERPROFILE%\Desktop\SmetaWIZARD5.lnk"
		rem Нужна кодировка 1251 для vbs, конвертирование через потоковое echo
		chcp 1251 > nul & (
			echo | echo Set objShell = CreateObject^("WScript.Shell"^)
			echo | echo Set objLink = objShell.CreateShortcut^("%USERPROFILE%\Desktop\SmetaWIZARD5.lnk"^)
			echo | echo objLink.Description = "Программный продукт для создания сметной документации"
			echo | echo objLink.TargetPath = "%targetapp%\sw5.exe"
			echo | echo objLink.Save
		) > "%TEMP%\CreateShortcut.vbs" & chcp 65001 > nul
		
		cscript "%TEMP%\CreateShortcut.vbs"
		if exist "%TEMP%\CreateShortcut.vbs" del "%TEMP%\CreateShortcut.vbs"
	)
	if exist "%targetapp%\sw4\smwiz.exe" (
		echo ... Создаем ярлык SmetaWIZARD4
		if exist "%USERPROFILE%\Desktop\SmetaWIZARD4.lnk" del "%USERPROFILE%\Desktop\SmetaWIZARD4.lnk"

		rem Нужна кодировка 1251 для vbs, конвертирование через потоковое echo
		chcp 1251 > nul & (
			echo | echo Set objShell = CreateObject^("WScript.Shell"^)
			echo | echo Set objLink = objShell.CreateShortcut^("%USERPROFILE%\Desktop\SmetaWIZARD4.lnk"^)
			echo | echo objLink.Description = "Программный продукт для создания сметной документации"
			echo | echo objLink.TargetPath = "%targetapp%\sw4\smwiz.exe"
			echo | echo objLink.Save
		) > "%TEMP%\CreateShortcut.vbs" & chcp 65001 > nul
		
		cscript "%TEMP%\CreateShortcut.vbs"
		if exist "%TEMP%\CreateShortcut.vbs" del "%TEMP%\CreateShortcut.vbs"
	)
	if exist "%targetapp%\sw4\contractwizard.exe" (
		echo ... Создаем ярлык ContractWIZARD
		if exist "%USERPROFILE%\Desktop\ContractWIZARD.lnk" del "%USERPROFILE%\Desktop\ContractWIZARD.lnk"

		rem Нужна кодировка 1251 для vbs, конвертирование через потоковое echo
		chcp 1251 > nul & (
			echo | echo Set objShell = CreateObject^("WScript.Shell"^)
			echo | echo Set objLink = objShell.CreateShortcut^("%USERPROFILE%\Desktop\ContractWIZARD.lnk"^)
			echo | echo objLink.Description = "Модуль автоматизированной загрузки актов к смете контракта в ЕИС Закупки"
			echo | echo objLink.TargetPath = "%targetapp%\sw4\ContractWIZARD.exe"
			echo | echo objLink.Save
		) > "%TEMP%\CreateShortcut.vbs" & chcp 65001 > nul
		
		cscript "%TEMP%\CreateShortcut.vbs"
		if exist "%TEMP%\CreateShortcut.vbs" del "%TEMP%\CreateShortcut.vbs"
	)
)

if exist "%ProgramData%\Wizardsoft" (
	echo ... Установка прав всем пользователям
	cacls "%ProgramData%\Wizardsoft" /T /E /C /G Пользователи:C
)


echo Установка и копирование компонентов окончена
echo ... Для выхода нажмите ПРОБЕЛ ...
timeout /T 10 > nul

ENDLOCAL