using C4IT.FASD.Base; using C4IT.MultiLanguage; using FasdDesktopUi.Basics.Models; using System; using System.Collections.Generic; using System.Linq; using static C4IT.Logging.cLogManager; namespace FasdDesktopUi.Basics.Services.SupportCase.Controllers { internal class SupportCaseHeadingController { internal static IEnumerable GetHeadingData(Dictionary relations) { try { return Enum.GetValues(typeof(enumFasdInformationClass)) .Cast() .Select(informationClass => { if (relations.TryGetValue(informationClass, out var relation) && relation != null) return GetHeadingDataFor(relation); else return GetEmptyHeadingDataFor(informationClass); }); } catch (Exception ex) { LogException(ex); } return Enumerable.Empty(); } private static cHeadingDataModel GetEmptyHeadingDataFor(enumFasdInformationClass informationClass) { string headingText = string.Empty; switch (informationClass) { case enumFasdInformationClass.Computer: headingText = cMultiLanguageSupport.GetItem("Header.Select.Computer"); break; case enumFasdInformationClass.Ticket: headingText = cMultiLanguageSupport.GetItem("Header.Select.Ticket"); break; case enumFasdInformationClass.VirtualSession: headingText = cMultiLanguageSupport.GetItem("Header.Select.VirtualSession"); break; case enumFasdInformationClass.MobileDevice: headingText = cMultiLanguageSupport.GetItem("Header.Select.MobileDevice"); break; } return new cHeadingDataModel() { InformationClass = informationClass, HeadingText = headingText }; } private static cHeadingDataModel GetHeadingDataFor(cF4sdApiSearchResultRelation relation) { const string StatusString = "Status"; bool isOnline = false; string statusValue = "Unknown"; if (relation?.Infos?.TryGetValue(StatusString, out var statusValueFromDictionary) ?? false) statusValue = statusValueFromDictionary; switch (relation.Type) { case enumF4sdSearchResultClass.Computer: case enumF4sdSearchResultClass.User: isOnline = string.Equals(statusValue, "Online", StringComparison.InvariantCultureIgnoreCase); break; case enumF4sdSearchResultClass.Ticket: isOnline = !string.Equals(statusValue, nameof(enumTicketStatus.Closed)); break; case enumF4sdSearchResultClass.VirtualSession: isOnline = string.Equals(statusValue, nameof(enumCitrixSessionStatus.Active)); break; case enumF4sdSearchResultClass.MobileDevice: break; } return new cHeadingDataModel() { HeadingText = string.IsNullOrEmpty(relation.Name) ? relation.DisplayName : relation.Name, InformationClass = cF4sdIdentityEntry.GetFromSearchResult(relation.Type), IsOnline = isOnline, Identities = relation.Identities, Realtion = relation }; } } }