using System;
using API.Entities.Enums;
using API.Entities.Interfaces;
namespace API.DTOs;
#nullable enable
public sealed record SeriesDto : IHasReadTimeEstimate, IHasCoverImage
{
///
public int Id { get; init; }
///
public string? Name { get; init; }
///
public string? OriginalName { get; init; }
///
public string? LocalizedName { get; init; }
///
public string? SortName { get; init; }
///
public int Pages { get; init; }
///
public bool CoverImageLocked { get; set; }
///
public DateTime LastChapterAdded { get; set; }
///
public DateTime LastChapterAddedUtc { get; set; }
#region Progress (applied on the fly)
///
/// Rating from logged-in user
///
/// Calculated at API-time
public float UserRating { get; set; }
///
/// If the user has set the rating or not
///
/// Calculated at API-time
public bool HasUserRated { get; set; }
///
/// Min across the series
///
/// Calculated at API-time
public int TotalReads { get; set; }
///
/// Sum of pages read from linked Volumes. Calculated at API-time.
///
/// Calculated at API-time
public int PagesRead { get; set; }
///
/// DateTime representing last time the series was Read. Calculated at API-time.
///
/// Calculated at API-time
public DateTime LatestReadDate { get; set; }
#endregion
///
public MangaFormat Format { get; set; }
///
public DateTime Created { get; set; }
///
public bool SortNameLocked { get; set; }
///
public bool LocalizedNameLocked { get; set; }
///
public long WordCount { get; set; }
///
public int LibraryId { get; set; }
public string LibraryName { get; set; } = default!;
///
public int MinHoursToRead { get; set; }
///
public int MaxHoursToRead { get; set; }
///
public float AvgHoursToRead { get; set; }
///
public string FolderPath { get; set; } = default!;
///
public string? LowestFolderPath { get; set; }
///
public DateTime LastFolderScanned { get; set; }
#region KavitaPlus
///
public bool DontMatch { get; set; }
///
public bool IsBlacklisted { get; set; }
#endregion
#region ColorScape
///
public string? CoverImage { get; set; }
///
public string? PrimaryColor { get; set; } = string.Empty;
///
public string? SecondaryColor { get; set; } = string.Empty;
#endregion
public void ResetColorScape()
{
PrimaryColor = string.Empty;
SecondaryColor = string.Empty;
}
}