// updater.js

function include(fileName)
{
    var stream = new ActiveXObject("Adodb.Stream");
    stream.CharSet = "UNICODE";
    stream.Type = 2;    // adTypeText 
    stream.Open();
    stream.LoadFromFile(fileName);
    var code = stream.readText();
    stream.Close();
    return code;
}

var oHTA;
var scriptFileName = WScript.ScriptFullName;
var scriptDir = scriptFileName.substr(0, scriptFileName.lastIndexOf("\\") + 1);

eval(include(scriptDir + "helpers.js"));
eval(include(scriptDir + "main.js"));

// Вывести сообщение о ходе обновления
function setProgress(statusText)
{
	statusText += "...";
	log(statusText);
}

function checkResult(ret)
{
    if (ret == 0)
        return;
    log(format("Завершение с ошибкой. Код ошибки: {0}. Подробности см. в предыдущей записи.", ret), true);
    setProgress("Восстановление информационной базы");

    finalize();
    ClearTempFiles(); 

    WScript.Quit(ret);
}

function ClearTempFiles()
{
    // Удаляем временные файлы
	try
	{
		oFileSystemObject.DeleteFile(thisFileDir + '\\main.js');
		oFileSystemObject.DeleteFile(thisFileDir + '\\helpers.js');
	}
	catch(e) {}
}


setProgress("Инициализация");
var ret = initialize();
checkResult(ret);

setProgress("Завершение работы пользователей");
ret = disconnectAndBlockUsers(); 
checkResult(ret);

setProgress("Cоздание резервной копии информационной базы");
ret = backupDB(); 
checkResult(ret);

if (cfgFileNames.length == 0)
{
    setProgress("Обновление конфигурации информационной базы");
    ret = updateDbCfg(); 
    checkResult(ret);
}
else
{
	for(var cfgFileIndex = 0; cfgFileIndex < cfgFileNames.length; cfgFileIndex++)
	{
	    setProgress(format("Загрузка файла обновления в основную базу ({0}/{1})", cfgFileIndex + 1, cfgFileNames.length));
	    ret = updateCfg(cfgFileNames[cfgFileIndex]);
	    if (ret != 0)   // Если не удалось загрузить файл, возможно конфигурация не находится на поддержке.
	        ret = loadCfg(cfgFileNames[cfgFileIndex]);
	    checkResult(ret);
	    setProgress(format("Обновление конфигурации информационной базы ({0}/{1})", cfgFileIndex + 1, cfgFileNames.length));
	    ret = updateDbCfg(); 
	    checkResult(ret);
	}
}

setProgress("Разрешение подключений новых соединений");
ret = allowConnections(); 
checkResult(ret);

setProgress("Завершение");
finalize(true);
ClearTempFiles();