package com.wzj.soopin.im.service;

import java.util.List;
import java.util.Map;
import com.wzj.soopin.im.service.impl.TencentIMServiceImpl;

/**
 * 腾讯IM服务接口
 *
 * @author wzj
 */
public interface ITencentIMService {

    /**
     * 发送消息到腾讯IM
     *
     * @param fromUserId 发送方用户ID
     * @param toUserId 接收方用户ID
     * @param content 消息内容
     * @return 是否发送成功
     */
    boolean sendMessageToTencentIM(String fromUserId, String toUserId, String content, String cloudCustomData);

    /**
     * 推送消息给全体用户
     *
     * @param title 消息标题
     * @param desc 消息描述
     * @param offlinePush 是否离线推送
     * @param ext 扩展字段(JSON字符串)
     * @return 是否发送成功
     */
    boolean pushToAll(String title, String desc, boolean offlinePush, String ext);

    /**
     * 根据用户属性推送消息
     *
     * @param title 消息标题
     * @param desc 消息描述
     * @param attributes 用户属性条件
     * @param offlinePush 是否离线推送
     * @param ext 扩展字段(JSON字符串)
     * @return 是否发送成功
     */
    boolean pushByAttributes(String title, String desc, Map<String, Object> attributes, boolean offlinePush, String ext);

    /**
     * 根据标签推送消息
     *
     * @param title 消息标题
     * @param desc 消息描述
     * @param tags 标签列表
     * @param offlinePush 是否离线推送
     * @param ext 扩展字段(JSON字符串)
     * @return 是否发送成功
     */
    boolean pushByTags(String title, String desc, List<String> tags, boolean offlinePush, String ext);

    /**
     * 推送消息给指定用户
     *
     * @param title 消息标题
     * @param desc 消息描述
     * @param userIds 用户ID列表
     * @param offlinePush 是否离线推送
     * @param ext 扩展字段(JSON字符串)
     * @return 是否发送成功
     */
    boolean pushToUsers(String title, String desc, List<String> userIds, boolean offlinePush, String ext);

    /**
     * 处理消息变量替换
     *
     * @param content 原始内容
     * @param variables 变量映射
     * @return 替换后的内容
     */
    String processMessageVariables(String content, Map<String, String> variables);
}
