using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Kavita.Models.DTOs;
using Kavita.Models.Entities;
using Kavita.Models.Entities.Enums;
namespace Kavita.API.Repositories;
[Flags]
public enum VolumeIncludes
{
None = 1 << 0,
Chapters = 1 << 1,
People = 1 << 2,
Tags = 1 << 3,
///
/// This will include Chapters by default
///
Files = 1 << 4
}
public interface IVolumeRepository
{
void Add(Volume volume);
void Update(Volume volume);
void Remove(Volume volume);
void Remove(IList volumes);
Task> GetFilesForVolume(int volumeId, CancellationToken ct = default);
Task GetVolumeCoverImageAsync(int volumeId, CancellationToken ct = default);
Task> GetChapterIdsByVolumeIds(IReadOnlyList volumeIds, CancellationToken ct = default);
Task> GetVolumesDtoAsync(int seriesId, int userId, VolumeIncludes includes = VolumeIncludes.Chapters, CancellationToken ct = default);
Task GetVolumeByIdAsync(int volumeId, VolumeIncludes includes = VolumeIncludes.Files, CancellationToken ct = default);
Task GetVolumeDtoAsync(int volumeId, int userId, CancellationToken ct = default);
Task> GetVolumesForSeriesAsync(IList seriesIds, bool includeChapters = false, CancellationToken ct = default);
Task> GetVolumes(int seriesId, CancellationToken ct = default);
Task> GetVolumesById(IList volumeIds, VolumeIncludes includes = VolumeIncludes.None, CancellationToken ct = default);
Task> GetAllWithCoversInDifferentEncoding(EncodeFormat encodeFormat, CancellationToken ct = default);
Task> GetCoverImagesForLockedVolumesAsync(CancellationToken ct = default);
Task GetFilesizeForVolumeAsync(int volumeId, CancellationToken ct = default);
Task> GetFilesizeForVolumesAsync(IList volumeIds, CancellationToken ct = default);
}