using EllieBot.Db.Models;

namespace EllieBot.Modules.Utility;

public interface IQuoteService
{
    /// <summary>
    /// Delete all quotes created by the author in a guild
    /// </summary>
    /// <param name="guildId">ID of the guild</param>
    /// <param name="userId">ID of the user</param>
    /// <returns>Number of deleted qutoes</returns>
    Task<int> DeleteAllAuthorQuotesAsync(ulong guildId, ulong userId);

    /// <summary>
    /// Delete all quotes in a guild
    /// </summary>
    /// <param name="guildId">ID of the guild</param>
    /// <returns>Number of deleted qutoes</returns>
    Task<int> DeleteAllQuotesAsync(ulong guildId);

    Task<IReadOnlyCollection<Quote>> GetAllQuotesAsync(ulong guildId, int page, OrderType order);
    Task<Quote?> GetQuoteByKeywordAsync(ulong guildId, string keyword);

    Task<IReadOnlyCollection<Quote>> SearchQuoteKeywordTextAsync(
        ulong guildId,
        string? keyword,
        string text);

    Task<IReadOnlyCollection<Quote>> GetGuildQuotesAsync(ulong guildId);
    Task<int> RemoveAllByKeyword(ulong guildId, string keyword);
    Task<Quote?> GetQuoteByIdAsync(ulong guildId, int quoteId);

    Task<Quote> AddQuoteAsync(
        ulong guildId,
        ulong authorId,
        string authorName,
        string keyword,
        string text);

    Task<Quote?> EditQuoteAsync(ulong authorId, int quoteId, string text);

    Task<bool> DeleteQuoteAsync(
        ulong guildId,
        ulong authorId,
        bool isQuoteManager,
        int quoteId);

    Task<bool> ImportQuotesAsync(ulong guildId, string input);
}