package com.red.circle.other.app.inner.service.material.props;

import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.sys.SysEmojiConfigParamCmd;
import com.red.circle.other.inner.model.cmd.sys.SysEmojiConfigQryCmd;
import com.red.circle.other.inner.model.cmd.sys.SysEmojiGroupParamCmd;
import com.red.circle.other.inner.model.cmd.sys.SysEmojiGroupQryCmd;
import com.red.circle.other.inner.model.dto.material.EmojiConfigDTO;
import com.red.circle.other.inner.model.dto.material.EmojiGroupDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 表情管理 服务类.
 *
 * @author pengliang on 2023/6/10
 */
public interface EmojiConfigClientService {

  /**
   * 获取分组下的表情包.
   *
   * @param groupId 分组id
   * @return list
   */
  List<EmojiConfigDTO> listEmojiByGroupId(Long groupId);

  /**
   * 获取表情组信息.
   *
   * @param groupIds 分组id
   * @return map
   */
  Map<Long, List<EmojiConfigDTO>> mapByGroupIds(Set<Long> groupIds);

  /**
   * 根据ids查询数据.
   */
  List<EmojiConfigDTO> listByIds(Set<Long> ids);

  /**
   * 获取表情分组.
   *
   * @param query 查询条件
   * @return page
   */
  PageResult<EmojiGroupDTO> pageEmojiGroup(SysEmojiGroupQryCmd query);

  /**
   * 添加或修改.
   *
   * @param param 参数
   */
  void groupAddOrUpdate(SysEmojiGroupParamCmd param);

  /**
   * 获取分组列表.
   *
   * @param sysOrigin 归属系统
   * @return list
   */
  List<EmojiGroupDTO> groupListBySysOrigin(String sysOrigin);

  /**
   * 切换上下架状态.
   *
   * @param id     id
   * @param status 状态
   */
  void switchGroupShelfStatus(Long id, Boolean status);

  /**
   * 表情列表
   */
  PageResult<EmojiConfigDTO> pageEmojiConfig(SysEmojiConfigQryCmd query);

  /**
   * 新增或修改表情配置
   */
  void emojiConfigAddOrUpdate(SysEmojiConfigParamCmd param);

  /**
   * 下架或上架表情
   */
  void offShelf(Long id);

  /**
   * 获取分组信息
   */
  Map<Long, EmojiGroupDTO> mapEmojiGroupByIds(Set<Long> ids);
}
