Attribute VB_Name = "z_UIMessages"
' Messaging module
Option Private Module
Option Explicit

Public Enum MsgCode
  EM_DATABASE_NOT_FOUND
  EM_FILENAME_TAKEN
  EM_ID_TAKEN
  EN_FILE_EXISTS
  EM_FAILED_OUTPUT_CREATION
  EM_INVALID_SELECTION
  EM_INVALID_QUERY_INPUT
  EM_ID_NOT_FOUND
 
  IM_IMPORT_SUCCESS
  IM_UNSTUCK_SUCCESS
  IM_CLEAR_SUCCESS
  IM_NEW_DOC_SUCCESS
  IM_LOAD_TEXT_SUCCESS
  IM_EXPORT_SUCCESS
  IM_QUERY_SUCCESS
  
  QM_LOAD_TEXTS
  QM_CLEAR_DATA
  QM_CLEAR_IMPORTED_DATA
End Enum

Private g_UI As API_UserInteraction

Public Function UserInteraction() As API_UserInteraction
  If g_UI Is Nothing Then _
    Set g_UI = New API_UserInteraction
  Set UserInteraction = g_UI
End Function

Public Function SetUserInteraction(newUI As API_UserInteraction)
  Set g_UI = newUI
End Function

Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant)
  Dim unwrapped As Variant: unwrapped = params
  unwrapped = FixForwardedParams(unwrapped)
  
  Select Case theCode
  Case EM_DATABASE_NOT_FOUND
    Call MsgBox("Не удалось открыть базу Реестра НПА. Проверьте корректность указанного пути", vbExclamation)
  Case EM_FILENAME_TAKEN
    Call MsgBox("Файл с таким именем уже есть в Реестре", vbExclamation)
  Case EM_ID_TAKEN
    Call MsgBox("Документ с выбранным идентификатором уже присутствует в Реестре", vbExclamation)
  Case EN_FILE_EXISTS
    Call MsgBox("Документ уже предложен к добавлению в Реестр", vbExclamation)
  Case EM_FAILED_OUTPUT_CREATION
    Call MsgBox("Не удалось создать документ для выгрузки", vbExclamation)
  Case EM_INVALID_SELECTION
    Call MsgBox("Выделение не корректно. Пожалуйста, выделите документы для запроса", vbExclamation)
  Case EM_INVALID_QUERY_INPUT
    Call MsgBox("Введен некорректный идентификатор документа", vbExclamation)
  Case EM_ID_NOT_FOUND
    Call MsgBox("Введенный идентификатор документа отсутствует в базе Реестра", vbExclamation)

  Case IM_IMPORT_SUCCESS
    Call MsgBox("Импорт данных произведен успешно", vbInformation)
  Case IM_UNSTUCK_SUCCESS
    Call MsgBox("Работа интерфейса восстановлена", vbInformation)
  Case IM_CLEAR_SUCCESS
    Call MsgBox("Очистка завершена", vbInformation)
  Case IM_NEW_DOC_SUCCESS
    Call MsgBox("Документ скопирован в папку к добавлению в Реестр", vbInformation)
  Case IM_LOAD_TEXT_SUCCESS
    Call MsgBox("Тексты связей успешно загружены", vbInformation)
  Case IM_EXPORT_SUCCESS
    Call MsgBox("Экспорт данных завершен", vbInformation)
  Case IM_QUERY_SUCCESS
    Call MsgBox("Запрос обработан", vbInformation)
  
  Case Else
    Call MsgBox("Неверный код сообщения", vbCritical)
  End Select
End Function

Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean
  Dim unwrapped As Variant: unwrapped = params
  unwrapped = FixForwardedParams(unwrapped)
  
  Dim answer&: answer = vbNo
  Select Case theCode
  Case QM_LOAD_TEXTS
    answer = MsgBox("Загрузить тексты документов для выгрузки ссылок? Данная операция может занять много времени", vbYesNo + vbQuestion)
  Case QM_CLEAR_DATA
    answer = MsgBox("Удалить все данные?", vbYesNo + vbQuestion)
  Case QM_CLEAR_IMPORTED_DATA
    answer = MsgBox("Удалить импортированные данные?", vbYesNo + vbQuestion)
    
  Case Else
    Call MsgBox("Invalid message code", vbCritical)
  End Select
  UIAskQuestion = answer = vbYes
End Function
