using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Kavita.Models.DTOs.Dashboard;
using Kavita.Models.DTOs.SideNav;
using Kavita.Models.Entities.User;
namespace Kavita.API.Services;
///
/// For SideNavStream and DashboardStream manipulation
///
public interface IStreamService
{
Task> GetDashboardStreams(int userId, bool visibleOnly = true, CancellationToken ct = default);
Task> GetSidenavStreams(int userId, bool visibleOnly = true, CancellationToken ct = default);
Task> GetExternalSources(int userId, CancellationToken ct = default);
Task CreateDashboardStreamFromSmartFilter(int userId, int smartFilterId, CancellationToken ct = default);
Task UpdateDashboardStream(int userId, DashboardStreamDto dto, CancellationToken ct = default);
Task UpdateDashboardStreamPosition(int userId, UpdateStreamPositionDto dto, CancellationToken ct = default);
Task UpdateSideNavStreamBulk(int userId, BulkUpdateSideNavStreamVisibilityDto dto, CancellationToken ct = default);
Task CreateSideNavStreamFromSmartFilter(int userId, int smartFilterId, CancellationToken ct = default);
Task CreateSideNavStreamFromExternalSource(int userId, int externalSourceId, CancellationToken ct = default);
Task UpdateSideNavStream(int userId, SideNavStreamDto dto, CancellationToken ct = default);
Task UpdateSideNavStreamPosition(int userId, UpdateStreamPositionDto dto, CancellationToken ct = default);
Task CreateExternalSource(int userId, ExternalSourceDto dto, CancellationToken ct = default);
Task UpdateExternalSource(int userId, ExternalSourceDto dto, CancellationToken ct = default);
Task DeleteExternalSource(int userId, int externalSourceId, CancellationToken ct = default);
Task DeleteSideNavSmartFilterStream(int userId, int sideNavStreamId, CancellationToken ct = default);
Task DeleteDashboardSmartFilterStream(int userId, int dashboardStreamId, CancellationToken ct = default);
Task RenameSmartFilterStreams(AppUserSmartFilter smartFilter, CancellationToken ct = default);
}