using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Markup.Xaml.Templates; using AI.Models; namespace AI.Converters { public class MessageTemplateSelector : IDataTemplate { public required DataTemplate TextMessageTemplate { get; set; } public required DataTemplate FileMessageTemplate { get; set; } public required DataTemplate WorkflowStatusTemplate { get; set; } public required DataTemplate FormMessageTemplate { get; set; } public required DataTemplate TableMessageTemplate { get; set; } public required DataTemplate ColumnMatchMessageTemplate { get; set; } public required DataTemplate ParameterSetMessageTemplate { get; set; } public required DataTemplate XyzLoadCardTemplate { get; set; } public required DataTemplate GriddingParamCardTemplate { get; set; } public Control? Build(object? param) { if (param is ChatMessageModel message) { return message.Type switch { MessageType.File => FileMessageTemplate.Build(param), MessageType.WorkflowStatus => WorkflowStatusTemplate.Build(param), MessageType.Form => FormMessageTemplate.Build(param), MessageType.Table => TableMessageTemplate.Build(param), MessageType.ColumnMatch => ColumnMatchMessageTemplate.Build(param), MessageType.ParameterSet => ParameterSetMessageTemplate.Build(param), MessageType.KnowledgeBase => TextMessageTemplate?.Build(param), MessageType.XyzLoadCard => XyzLoadCardTemplate.Build(param), MessageType.GriddingParamCard => GriddingParamCardTemplate.Build(param), _ => TextMessageTemplate?.Build(param), }; } return TextMessageTemplate?.Build(param); } public bool Match(object? data) { return data is ChatMessageModel; } } }