///
import type { ChatStatus } from "../../types/chat/ChatStatus";
import IClientModule from "../client/IClientModule";
import IMessage from "../message/IMessage";
import IUser from "../user/IUser";
/** Interface do controlador da sala de bate-papo */
export default interface IChatController extends IClientModule {
/** @returns Retorna o nome da sala de bate-papo */
getName(): Promise;
/** Define o nome da sala de bate-pao
* @param name Nome da sala de bate-papo
*/
setName(name: string): Promise;
/** @returns Retorna a descrição da sala de bate-papo */
getDescription(): Promise;
/**
* Define a descrição da sala de bate-papo
* @param description Descrição da sala de bate-papo
*/
setDescription(description: string): Promise;
/** @returns Retorna a imagem de perfil da sala de bate-papo */
getProfile(): Promise;
/**
* Define a foto de perfil da sala de bate-papo
* @param image Nova foto de perfil da sala de bate-papo
*/
setProfile(image: Buffer): Promise;
/**
* @param user Usuário que será verificado
* @returns Retorna se o usuário é administrador da sala de bate-papo
*/
isAdmin(user: IUser | string): Promise;
/**
* @param user Usuário que será verificado
* @returns Retorna se o usuário é lider da sala de bate-papo
*/
isLeader(user: IUser | string): Promise;
/** @returns Retorna os administradores da sala de bate-papo */
getAdmins(): Promise>;
/** @returns Retorna os usuários da sala de bate-papo */
getUsers(): Promise>;
/**
* Adiciona um usuário a sala de bate-papo
* @param user Usuário que será adicionado
*/
addUser(user: IUser | string): Promise;
/**
* Remove um usuário da sala de bate-papo
* @param user Uusário que será removido
*/
removeUser(user: IUser | string): Promise;
/**
* Promove a administrador um usuário da sala de bate-papo
* @param user Usuário que será promovido
*/
promote(user: IUser | string): Promise;
/**
* * Remove o administrador de um usuário da sala de bate-papo
* @param user Usuário que terá sua administração removida
*/
demote(user: IUser | string): Promise;
/** Sai da sala de bate-papo */
leave(): Promise;
/**
* Envia uma mensagem na sala de bate-papo que a mensagem foi enviada
* @param message Mensagem que será enviada
*/
send(message: IMessage | string): Promise;
/**
* Altera o status da sala de bate-pappo
* @param status Status da sala de bate-papo
*/
changeStatus(status: ChatStatus): Promise;
}