using System; using System.Collections.Generic; using System.Linq; using Microsoft.SemanticKernel.ChatCompletion; namespace AI.Models.Store { public static class ConversationEntryMapper { public static List ToDtoList(IEnumerable? entries) { if (entries == null) { return new List(); } return entries.Select(e => { if (e is TextConversationEntry t) { return new ConversationEntryDto { Kind = t.Kind, Role = t.Role.ToString(), Content = t.Content }; } if (e is SpecialConversationEntry s) { return new ConversationEntryDto { Kind = s.Kind, Type = s.Type, Payload = s.Payload }; } return new ConversationEntryDto { Kind = e?.Kind ?? string.Empty }; }).ToList(); } public static List ToEntryList(IEnumerable? entries) { var list = new List(); if (entries == null) { return list; } foreach (var e in entries) { if (e == null) continue; if (string.Equals(e.Kind, "Text", StringComparison.OrdinalIgnoreCase)) { var role = AuthorRole.User; if (!string.IsNullOrEmpty(e.Role) && Enum.TryParse(e.Role, true, out var r)) { role = r; } list.Add(new TextConversationEntry(role, e.Content ?? string.Empty)); } else if (string.Equals(e.Kind, "Special", StringComparison.OrdinalIgnoreCase)) { list.Add(new SpecialConversationEntry(e.Type ?? string.Empty, e.Payload ?? string.Empty)); } } return list; } } }