// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
namespace Microsoft.Teams.Apps.Schema.Entities;
///
/// Citation entity extension methods.
///
public static class CitationEntityExtensions
{
///
/// Gets the first citation entity from the activity.
///
public static CitationEntity? GetCitation(this TeamsActivity activity)
{
ArgumentNullException.ThrowIfNull(activity);
if (activity.Entities == null)
{
return null;
}
return activity.Entities.FirstOrDefault(e => e is CitationEntity) as CitationEntity;
}
///
/// Internal helper to add a citation claim to an activity.
///
internal static CitationEntity AddToActivity(TeamsActivity activity, int position, CitationAppearance appearance)
{
ArgumentNullException.ThrowIfNull(activity);
ArgumentNullException.ThrowIfNull(appearance);
activity.Entities ??= [];
// Get or create the root message entity
OMessageEntity existingMessageEntity = OMessageEntityExtensions.GetOrCreateRootMessageEntity(activity);
// Remove existing message entity to replace with citation entity
activity.Entities.Remove(existingMessageEntity);
// Create citation entity from message entity
CitationEntity citationEntity = new(existingMessageEntity);
citationEntity.Citation ??= [];
citationEntity.Citation.Add(new CitationClaim()
{
Position = position,
Appearance = appearance.ToDocument()
});
activity.Entities.Add(citationEntity);
return citationEntity;
}
}