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

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	
	ИнициализироватьРеквизитыФормы();
	
	УстановитьВидимостьДоступность();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент)
	УстановитьВидимостьДоступность();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Готово(Команда)
	
	Если ПроверитьЗаполнение() Тогда
		
		РезультатЗакрытия = РезультатЗакрытияНаСервере();
		Закрыть(РезультатЗакрытия);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьПодключение(Команда)
	
	ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект);
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
		Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект);
		МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
		МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии);
	Иначе
		ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьТокен(Команда)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ClientID", Объект.ClientID);
	ПараметрыФормы.Вставить("ClientSecret", Объект.ClientSecret);
	
	Оповещение = Новый ОписаниеОповещения("ПолучитьТокенЗавершение", ЭтотОбъект);
	
	ОткрытьФорму("Обработка.ТранспортСообщенийОбменаЯндексДиск.Форма.ФормаПолученияТокена",
		ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
КонецПроцедуры
	
&НаКлиенте
Процедура ПолучитьТокенЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ЗаполнитьЗначенияСвойств(Объект, Результат);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция РезультатЗакрытияНаСервере()
	
	Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма);
	
КонецФункции

&НаСервереБезКонтекста
Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект)
	
	ЗапросыРазрешений = Новый Массив;
	Разрешения = Новый Массив;
	
	МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
	
	Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", "cloud-api.yandex.net"));
	
	ЗапросыРазрешений.Добавить(
		МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения));
	
	Возврат ЗапросыРазрешений;
	
КонецФункции

&НаКлиенте
Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.ОК Тогда
		
		ПодключениеУстановлено = Ложь;
		ПроверитьПодключениеНаСервере(ПодключениеУстановлено);
		
		ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"),
								НСтр("ru = 'Не удалось установить подключение.'"));
		ПоказатьПредупреждение(, ТекстПредупреждения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено)
	
	УстановитьПривилегированныйРежим(Истина);
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	
	// Выполняем проверку подключения.
	ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено();
	Если Не ПодключениеУстановлено Тогда
		
		Отказ = Истина;
		
		СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке
			+ Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'");
					
		ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ);
			
	КонецЕсли;
		
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьДоступность()

	Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения;
	
	НастройкиТранспорта = Неопределено;
	Параметры.Свойство("НастройкиТранспорта", НастройкиТранспорта);
	Если ЗначениеЗаполнено(НастройкиТранспорта) Тогда
		Элементы.НастройкиДоступа.Скрыть();
	КонецЕсли;
		
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьРеквизитыФормы()
	
	Если Не Параметры.Свойство("НастройкиТранспорта") Тогда
		Объект.СжиматьФайлИсходящегоСообщения = Истина;
	КонецЕсли;
		
КонецПроцедуры

#КонецОбласти

