using System;
using System.Collections.Generic;
using API.Entities;
using API.Entities.Enums;
namespace API.DTOs.Reader;
/// 
/// Represents an annotation on a book
/// 
public sealed record AnnotationDto
{
    public int Id { get; set; }
    /// 
    /// Starting point of the Highlight
    /// 
    public required string XPath { get; set; }
    /// 
    /// Ending point of the Highlight. Can be the same as 
    /// 
    public string EndingXPath { get; set; }
    /// 
    /// The text selected.
    /// 
    public string SelectedText { get; set; }
    /// 
    /// Rich text Comment
    /// 
    public string? Comment { get; set; }
    /// 
    public string? CommentHtml { get; set; }
    /// 
    public string? CommentPlainText { get; set; }
    /// 
    /// Title of the TOC Chapter within Epub (not Chapter Entity)
    /// 
    public string? ChapterTitle { get; set; }
    /// 
    /// A calculated selection of the surrounding text. This does not update after creation.
    /// 
    public string? Context { get; set; }
    /// 
    /// The number of characters selected
    /// 
    public int HighlightCount { get; set; }
    public bool ContainsSpoiler { get; set; }
    public int PageNumber { get; set; }
    /// 
    /// Selected Highlight Slot Index [0-4]
    /// 
    public int SelectedSlotIndex { get; set; }
    /// 
    public ISet Likes { get; set; }
    public string SeriesName { get; set; }
    public string LibraryName { get; set; }
    public required int ChapterId { get; set; }
    public required int VolumeId { get; set; }
    public required int SeriesId { get; set; }
    public required int LibraryId { get; set; }
    public required int OwnerUserId { get; set; }
    public string OwnerUsername { get; set; }
    /// 
    /// The age rating of the series this annotation is linked to
    /// 
    /// Not required when creating/updating an annotation, this is added in flight
    public AgeRating AgeRating { get; set; }
    public DateTime CreatedUtc { get; set; }
    public DateTime LastModifiedUtc { get; set; }
}