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

#Область ОписаниеПеременных

&НаКлиенте
Перем ФормаЗакрывается;

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

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)

	Если ФормаЗакрывается = Истина И Не ЗавершениеРаботы Тогда
		Закрыть(Истина);
	КонецЕсли;

КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура Подобрать(Команда)
	
	ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
	
КонецПроцедуры

&НаКлиенте
Процедура АктивироватьБота(Команда)

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

	Если ИнтеграцияИспользуется Тогда
		Закрыть(Истина);
		Возврат;		
	КонецЕсли;
	
	Элементы.Закрыть.Заголовок = НСтр("ru='Закрыть'");
	ФормаЗакрывается = Истина;

КонецПроцедуры

&НаКлиенте
Процедура Отключить(Команда)
	
	Попытка
		ОтключитьСервер();
	Исключение
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, 
			НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина);
		ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
	КонецПопытки;
	Закрыть(Истина);
		
КонецПроцедуры

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

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

&НаСервере
Процедура АктивироватьСервер()
	
	ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции();
	ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор;
	ПараметрыИнтеграции.Ключ = Наименование; 
	ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook;
	ПараметрыИнтеграции.Участники = Участники.Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь");
	
	Попытка
		ОписаниеИнтеграции = ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции);
		// Из-за особенностей реализации Системы взаимодействия требуется повторный вызов.
		Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(ОписаниеИнтеграции.Идентификатор);
	Исключение
		ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(),
			УровеньЖурналаРегистрации.Ошибка, , ,
			ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ВызватьИсключение;
	КонецПопытки;
	
	Если Интеграция <> Неопределено Тогда
		НавигационнаяСсылкаТочкиПодключения = Интеграция.НавигационнаяСсылкаТочкиПодключения;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОтключитьСервер()
	ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры

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