package com.faforever.client.chat;
import com.faforever.client.net.ConnectionState;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyIntegerProperty;
import javafx.collections.MapChangeListener;
import org.pircbotx.User;
import java.util.concurrent.CompletionStage;
import java.util.function.Consumer;
public interface ChatService {
void addOnMessageListener(Consumer<ChatMessage> listener);
void addOnPrivateChatMessageListener(Consumer<ChatMessage> listener);
void connect();
void disconnect();
CompletionStage<String> sendMessageInBackground(String target, String message);
/**
* Gets the list of chat users for the given channel as soon as it is available. <p> <strong>IMPORTANT:</strong> All
* operations on the returned list must be synchronized, even iteration. Use the map as monitor. </p>
*/
Channel getOrCreateChannel(String channelName);
ChatUser getOrCreateChatUser(String username);
void addUsersListener(String channelName, MapChangeListener<String, ChatUser> listener);
void addChatUsersByNameListener(MapChangeListener<String, ChatUser> listener);
void addChannelsListener(MapChangeListener<String, Channel> listener);
void removeUsersListener(String channelName, MapChangeListener<String, ChatUser> listener);
void leaveChannel(String channelName);
CompletionStage<String> sendActionInBackground(String target, String action);
void joinChannel(String channelName);
boolean isDefaultChannel(String channelName);
void close();
ChatUser getOrCreateChatUser(User user);
ObjectProperty<ConnectionState> connectionStateProperty();
void reconnect();
void whois(String username);
/**
* Increase or decrease the number of unread messages.
*
* @param delta a positive or negative number
*/
void incrementUnreadMessagesCount(int delta);
ReadOnlyIntegerProperty unreadMessagesCount();
}