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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта
Функция ПараметрыТранспорта() Экспорт
	
	Описание = НСтр("ru = 'Для подключения необходимо указать учетную запись электронной почты.'");
	
	Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта();
	
	Параметры.Псевдоним = НСтр("ru = 'Электронная почта'");
	Параметры.ИдентификаторТранспорта = "EMAIL";
	Параметры.Описание = Описание;
	Параметры.РеквизитыДляБезопасногоХранилища.Добавить("ПарольАрхиваСообщенияОбмена");
	Параметры.НастройкаУзлаВКорреспонденте = Истина;
	Параметры.Картинка = БиблиотекаКартинок.ТранспортЭлектроннаяПочта;
	
	Возврат Параметры;
	
КонецФункции

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

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

Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт
	
	Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения);
	
КонецФункции

Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт
	
	Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "EMAIL");
	
КонецФункции

Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт
	
	НастройкиТранспортаJSON = Новый Структура;
	
	ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена);
	
	НастройкиТранспортаJSON.Вставить("MaxMessageSize", НастройкиТранспорта.МаксимальныйДопустимыйРазмерСообщения);
	НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения);
	НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена);
	НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация);
	
	Если ЗначениеЗаполнено(НастройкиТранспорта.УчетнаяЗапись) Тогда
		
		СпрУчетнаязапись = НастройкиТранспорта.УчетнаяЗапись;
		
		УчетнаяЗапись = Новый Структура;
		
		УчетнаяЗапись.Вставить("Ref", Строка(СпрУчетнаяЗапись.УникальныйИдентификатор()));
		УчетнаяЗапись.Вставить("Description", СпрУчетнаяЗапись.Наименование);
		УчетнаяЗапись.Вставить("DeletionMark", СпрУчетнаяЗапись.ПометкаУдаления);
		УчетнаяЗапись.Вставить("PredefinedDataName", СпрУчетнаяЗапись.ИмяПредопределенныхДанных);
		
		Словарь = СловарьДляУчетнойЗаписи();
		Тип = ТипЗнч(СпрУчетнаязапись);
		МетаданныеСправочника = Метаданные.НайтиПоТипу(Тип);
		
		Для Каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл
			
			Ключ = Реквизит.Имя;
			Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда
				Если Словарь.Получить(Ключ) <> Неопределено Тогда
					Ключ = Словарь.Получить(Ключ);
				КонецЕсли;
			КонецЕсли;
			
			Значение = СпрУчетнаязапись[Реквизит.Имя];
			Если ТипЗнч(Значение) <> Тип("Число")
				Или ТипЗнч(Значение) <> Тип("Строка")
				Или ТипЗнч(Значение) <> Тип("Дата")
				Или ТипЗнч(Значение) <> Тип("Булево") Тогда
				
				Значение = Строка(Значение);
				
			КонецЕсли;
			
			УчетнаяЗапись.Вставить(Ключ, Значение);
			
		КонецЦикла;
		
		НастройкиТранспортаJSON.Вставить("Account", УчетнаяЗапись);
		
		ПарольSMTP = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.УчетнаяЗапись, "ПарольSMTP");
		Если ЗначениеЗаполнено(ПарольSMTP) Тогда
			НастройкиТранспортаJSON.Вставить("PasswordSMTP", ПарольSMTP);
		КонецЕсли;
		
	КонецЕсли;
			
	Возврат НастройкиТранспортаJSON;
	
КонецФункции

Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт
		
	НастройкиТранспорта = Новый Структура;
	НастройкиТранспорта.Вставить("МаксимальныйДопустимыйРазмерСообщения", НастройкиТранспортаJSON.MaxMessageSize);
	НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile);
	НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages);
	НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames);
	
	СтруктураУчетнойЗаписи = Новый Структура;
	СтруктураУчетнойЗаписи.Вставить("Наименование", НастройкиТранспортаJSON.Account.Description);
	СтруктураУчетнойЗаписи.Вставить("ИмяПредопределенныхДанных", НастройкиТранспортаJSON.Account.PredefinedDataName);
	
	Словарь = СловарьДляУчетнойЗаписи("ru");
	
	Для Каждого КлючИЗначение Из НастройкиТранспортаJSON.Account Цикл
		
		Ключ = КлючИЗначение.Ключ;
		Значение = КлючИЗначение.Значение;
		
		Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда
			Если Словарь.Получить(Ключ) <> Неопределено Тогда
				Ключ = Словарь.Получить(Ключ);
			Иначе
				Продолжить;
			КонецЕсли;
		КонецЕсли;
		
		СтруктураУчетнойЗаписи.Вставить(Ключ, Значение);
		
	КонецЦикла;
		
	ИмяСправочника = "УчетныеЗаписиЭлектроннойПочты";
	Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник." + ИмяСправочника);
	УчетнаяЗаписьЭлектроннойПочты = Менеджер.СоздатьЭлемент();
	УчетнаяЗаписьЭлектроннойПочты.Наименование = СтруктураУчетнойЗаписи.Наименование;
	Если СтруктураУчетнойЗаписи.Свойство("ИмяПредопределенныхДанных") Тогда
		УчетнаяЗаписьЭлектроннойПочты.ИмяПредопределенныхДанных = СтруктураУчетнойЗаписи.ИмяПредопределенныхДанных;
	КонецЕсли;
		
	Для Каждого Реквизит Из Метаданные.Справочники[ИмяСправочника].Реквизиты Цикл
		
		Если Не СтруктураУчетнойЗаписи.Свойство(Реквизит.Имя) Тогда
			Продолжить;
		КонецЕсли;
		
		УчетнаяЗаписьЭлектроннойПочты[Реквизит.Имя] = СтруктураУчетнойЗаписи[Реквизит.Имя];
		
	КонецЦикла;

	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
		
		МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный");
		
		УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента(
			УчетнаяЗаписьЭлектроннойПочты);
			
		НастройкиТранспорта.Вставить("УчетнаяЗапись", УчетнаяЗаписьЭтойБазы.Ссылка);
		
		ПарольSMTP = "";
		Если НастройкиТранспортаJSON.Свойство("PasswordSMTP", ПарольSMTP) Тогда
			ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьЭтойБазы.Ссылка, ПарольSMTP);
			ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьЭтойБазы.Ссылка, ПарольSMTP, "ПарольSMTP");
		КонецЕсли;
		
	КонецЕсли;
		
	Возврат НастройкиТранспорта;
	
КонецФункции

Функция СловарьДляУчетнойЗаписи(НаправлениеПеревода = "en")
	
	Словарь = Новый Соответствие;
	
	Словарь.Вставить("АдресЭлектроннойПочты", "Email");
	Словарь.Вставить("ВремяОжидания", "Timeout");
	Словарь.Вставить("ИмяПользователя", "UserName");
	Словарь.Вставить("ИспользоватьДляОтправки", "UseForSending");
	Словарь.Вставить("ИспользоватьДляПолучения", "UseForReceiving");
	Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", "UseSecureConnectionForIncomingMail");
	Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", "UseSecureConnectionForOutgoingMail");
	Словарь.Вставить("ОставлятьКопииСообщенийНаСервере", "KeepMessageCopiesAtServer");
	Словарь.Вставить("ПериодХраненияСообщенийНаСервере", "KeepMailAtServerPeriod");
	Словарь.Вставить("Пользователь", "User");
	Словарь.Вставить("ПользовательSMTP", "SMTPUser");
	Словарь.Вставить("ПортСервераВходящейПочты", "IncomingMailServerPort");
	Словарь.Вставить("ПортСервераИсходящейПочты", "OutgoingMailServerPort");
	Словарь.Вставить("ПротоколВходящейПочты", "ProtocolForIncomingMail");
	Словарь.Вставить("СерверВходящейПочты", "IncomingMailServer");
	Словарь.Вставить("СерверИсходящейПочты", "OutgoingMailServer");
	Словарь.Вставить("ТребуетсяВходНаСерверПередОтправкой", "SignInBeforeSendingRequired");
	Словарь.Вставить("ОтправлятьСкрытыеКопииПисемНаЭтотАдрес", "SendBCCToThisAddress");
	Словарь.Вставить("ВладелецУчетнойЗаписи", "AccountOwner");
	Словарь.Вставить("ПриОтправкеПисемТребуетсяАвторизация", "AuthorizationRequiredOnSendEmails");
	Словарь.Вставить("АвторизацияСПомощьюПочтовогоСервиса", "EmailServiceAuthorization");
	Словарь.Вставить("ИмяПочтовогоСервиса", "EmailServiceName");
	
	Если НаправлениеПеревода = "en" Тогда
		
		Возврат Словарь;
		
	ИначеЕсли НаправлениеПеревода = "ru" Тогда
		
		НовыйСловарь = Новый Соответствие;
		Для Каждого КлючИЗначение Из Словарь Цикл
			НовыйСловарь.Вставить(КлючИЗначение.Значение, КлючИЗначение.Ключ);
		КонецЦикла;
		
		Возврат НовыйСловарь;
		
	КонецЕсли;
	
КонецФункции

Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт
	
	Возврат "";
	
КонецФункции

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