using Postall.Domain.Dtos;
using Postall.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Postall.Domain.Contracts.Repositories
{
///
/// Interface para repositório de canais do YouTube no MongoDB
///
public interface IChannelRepository
{
///
/// Obtém todos os canais
///
Task> GetAllAsync();
///
/// Obtém um canal pelo ID do MongoDB
///
Task GetByIdAsync(string id);
///
/// Obtém os canais pelo ID do usuario do MongoDB
///
Task> GetByUserIdAsync(string userId);
///
/// Obtém os canais pelo ID do usuario e o channelId
///
Task GetByUserIdAndChannelIdAsync(string userId, string channelId);
///
/// Obtém um canal pelo ID do YouTube
///
Task GetByYoutubeIdAsync(string youtubeId);
///
/// Adiciona um novo canal
///
Task AddAsync(ChannelData ChannelData);
///
/// Adiciona vários canais de uma vez
///
Task> AddManyAsync(IEnumerable channels);
///
/// Atualiza um canal existente
///
Task UpdateAsync(ChannelData ChannelData);
///
/// Remove um canal pelo ID do MongoDB
///
Task DeleteAsync(string id);
///
/// Remove um canal pelo ID do YouTube
///
Task DeleteByYoutubeIdAsync(string youtubeId);
///
/// Busca canais com base em um termo de pesquisa no título ou descrição
///
Task> SearchAsync(string searchTerm);
///
/// Obtém canais selecionados (IsSelected = true)
///
Task> GetSelectedAsync();
///
/// Marca ou desmarca um canal como selecionado
///
Task SetSelectedStatusAsync(string id, bool isSelected);
///
/// Converte ChannelResponse para ChannelData
///
ChannelData ConvertFromResponse(ChannelResponse channelResponse);
///
/// Converte ChannelData para ChannelResponse
///
ChannelResponse ConvertToResponse(ChannelData ChannelData);
}
}