using System;
using System.Collections.Generic;
using API.Entities.Enums;
using API.Entities.Interfaces;
using API.Parser;
namespace API.Entities;
public class Chapter : IEntityDate, IHasReadTimeEstimate
{
public int Id { get; set; }
///
/// Range of numbers. Chapter 2-4 -> "2-4". Chapter 2 -> "2".
///
public required string Range { get; set; }
///
/// Smallest number of the Range. Can be a partial like Chapter 4.5
///
public required string Number { get; set; }
///
/// The files that represent this Chapter
///
public ICollection Files { get; set; } = null!;
public DateTime Created { get; set; }
public DateTime LastModified { get; set; }
public DateTime CreatedUtc { get; set; }
public DateTime LastModifiedUtc { get; set; }
///
/// Relative path to the (managed) image file representing the cover image
///
/// The file is managed internally to Kavita's APPDIR
public string? CoverImage { get; set; }
public bool CoverImageLocked { get; set; }
///
/// Total number of pages in all MangaFiles
///
public int Pages { get; set; }
///
/// If this Chapter contains files that could only be identified as Series or has Special Identifier from filename
///
public bool IsSpecial { get; set; }
///
/// Used for books/specials to display custom title. For non-specials/books, will be set to
///
public string? Title { get; set; }
///
/// Age Rating for the issue/chapter
///
public AgeRating AgeRating { get; set; }
///
/// Chapter title
///
/// This should not be confused with Title which is used for special filenames.
public string TitleName { get; set; } = string.Empty;
///
/// Date which chapter was released
///
public DateTime ReleaseDate { get; set; }
///
/// Summary for the Chapter/Issue
///
public string? Summary { get; set; }
///
/// Language for the Chapter/Issue
///
public string? Language { get; set; }
///
/// Total number of issues or volumes in the series
///
/// Users may use Volume count or issue count. Kavita performs some light logic to help Count match up with TotalCount
public int TotalCount { get; set; } = 0;
///
/// Number of the Total Count (progress the Series is complete)
///
public int Count { get; set; } = 0;
///
/// SeriesGroup tag in ComicInfo
///
public string SeriesGroup { get; set; } = string.Empty;
public string StoryArc { get; set; } = string.Empty;
public string StoryArcNumber { get; set; } = string.Empty;
public string AlternateNumber { get; set; } = string.Empty;
public string AlternateSeries { get; set; } = string.Empty;
///
/// Not currently used in Kavita
///
public int AlternateCount { get; set; } = 0;
///
/// Total Word count of all chapters in this chapter.
///
/// Word Count is only available from EPUB files
public long WordCount { get; set; }
///
public int MinHoursToRead { get; set; }
///
public int MaxHoursToRead { get; set; }
///
public int AvgHoursToRead { get; set; }
///
/// All people attached at a Chapter level. Usually Comics will have different people per issue.
///
public ICollection People { get; set; } = new List();
///
/// Genres for the Chapter
///
public ICollection Genres { get; set; } = new List();
public ICollection Tags { get; set; } = new List();
public ICollection UserProgress { get; set; }
// Relationships
public Volume Volume { get; set; } = null!;
public int VolumeId { get; set; }
public void UpdateFrom(ParserInfo info)
{
Files ??= new List();
IsSpecial = info.IsSpecialInfo();
if (IsSpecial)
{
Number = "0";
}
Title = (IsSpecial && info.Format == MangaFormat.Epub)
? info.Title
: Range;
}
}