// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;
using System.Collections.Generic;

namespace osu.Game.Online.Chat
{
    /// <summary>
    /// Interface for consuming online chat.
    /// </summary>
    public interface IChatClient : IDisposable
    {
        /// <summary>
        /// Fired when a <see cref="Channel"/> has been joined.
        /// </summary>
        event Action<Channel>? ChannelJoined;

        /// <summary>
        /// Fired when a <see cref="Channel"/> has been parted.
        /// </summary>
        event Action<Channel>? ChannelParted;

        /// <summary>
        /// Fired when new <see cref="Message"/>s have arrived from the server.
        /// </summary>
        event Action<List<Message>>? NewMessages;

        /// <summary>
        /// Requests presence information from the server.
        /// </summary>
        void RequestPresence();

        /// <summary>
        /// Fired when the initial user presence information has been received.
        /// </summary>
        event Action? PresenceReceived;
    }
}