///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2018, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

// updater.js

function include (fileName) {
  var stream = new ActiveXObject('Adodb.Stream')
  stream.CharSet = 'UTF-16'
  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('[СообщениеЗаставкиОшибкаШага]', ret), true)
  
  finalize()
  ClearTempFiles()

  WScript.Quit(ret)
}

setProgress('[СообщениеИнициализация]')
var ret = initialize()
checkResult(ret)

setProgress('[СообщениеЗавершениеРаботыПользователей]')
ret = disconnectAndBlockUsers()
checkResult(ret)

if (createBackup) {
  setProgress('[СообщениеСозданиеРезервнойКопииБазы]')
  ret = backupDB()
  checkResult(ret)
}

if (executeDeferredHandlers) {
  setProgress('[СообщениеВыполнениеОтложенныхОбработчиковОбновления]')
  ret = runDeferredHandlers()
  checkResult(ret)
}

if (cfgFileNames.length === 0) {
  if (updateConfiguration){
    setProgress('[СообщениеОбновлениеКонфигурации]')
    ret = updateDbCfg()
    checkResult(ret)
  } 
  if (loadExtentions){
    setProgress('[СообщениеЗагрузкаРасширений]')
    ret = executeLoadExt()
    checkResult(ret)
  }
} else {
  for (var cfgFileIndex = 0; cfgFileIndex < cfgFileNames.length; cfgFileIndex++) {
    var fileProperties = GetRequired(cfgFileNames[cfgFileIndex])

    setProgress(format('[СообщениеЗагрузкаФайлаОбновлений]', cfgFileIndex + 1, cfgFileNames.length))
    ret = updateCfg(fileProperties.filePath)
    // Если не удалось загрузить файл, возможно конфигурация не находится на поддержке.
    if (ret !== 0) {
      ret = loadCfg(fileProperties.filePath)
    }
    checkResult(ret)

    setProgress(format('[СообщениеПараметрыОбновленияКонфигурации]', cfgFileIndex + 1, cfgFileNames.length))
    ret = updateDbCfg()
    checkResult(ret)

    if (fileProperties.requiredVersion || (cfgFileIndex + 1 === cfgFileNames.length)) {
      setProgress(format('[СообщениеВыполнениеОбработчиковОбновления]', cfgFileIndex + 1, cfgFileNames.length))
      ret = executeUpdate(cfgFileIndex + 1 === cfgFileNames.length)
      checkResult(ret)
    }
  }
}

setProgress('[СообщениеРазрешениеПодключений]')
ret = allowConnections()
checkResult(ret)

setProgress('[СообщениеЗавершениеОбновления]')
finalize(true)
ClearTempFiles()
