namespace SharpChat.Messages;

public interface MessageStorage {
    Task LogMessage(Message msg);
    Task LogMessage(
        long id,
        string type,
        string channelName,
        string senderId,
        string senderName,
        ColourInheritable senderColour,
        int senderRank,
        string senderNick,
        UserPermissions senderPerms,
        object? data = null
    );
    Task DeleteMessage(Message msg);
    Task<Message?> GetMessage(long id);
    Task<long> CountMessages(
        string? channelName = null,
        bool includeDeleted = false
    );
    Task<IEnumerable<Message>> GetMessages(
        string? channelName = null,
        int? take = 20,
        long? beforeId = null,
        bool includeDeleted = false
    );
}