package com.pcloud.book.cultivate.biz;

import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.cultivate.dto.CultivateNotifyDTO;
import com.pcloud.book.cultivate.dto.CultivateNotifyPageDTO;
import com.pcloud.book.cultivate.dto.NotifySendDTO;
import com.pcloud.book.cultivate.dto.SearchNotifyDTO;
import com.pcloud.book.cultivate.dto.SearchSendUserDTO;
import com.pcloud.book.cultivate.entity.AppletNotifySendDTO;
import com.pcloud.book.cultivate.entity.CultivateNotify;
import com.pcloud.book.cultivate.entity.CultivateNotifySend;
import com.pcloud.common.page.PageBeanNew;

import com.pcloud.book.cultivate.dto.CultivateNotifyTypeDTO;
import com.pcloud.readercenter.wechat.dto.MiniUserDto;

import java.util.List;

public interface CultivateNotifyBiz {

    void createNotify(CultivateNotifyDTO cultivateNotifyDTO);

    void sendAppletTemplateMessage(List<CultivateNotifySend> list, Long agentId, Long miniOfficialAccountsId);

    PageBeanNew<CultivateNotifyPageDTO> listPage4CultivateNotify(SearchNotifyDTO searchNotifyDTO);

    CultivateNotifyDTO getFirstNoReadNotify(Long wechatUserId);

    List<CultivateNotifyTypeDTO> getNotify4Type(Long wechatUserId);

    PageBeanNew<CultivateNotifyDTO> getNotifyListByType(Long wechatUserId, Integer messageType, Integer currentPage, Integer numPerPage);

    PageBeanNew<MiniUserDto> listPage4SendUser(SearchSendUserDTO searchSendUserDTO);

    PageBeanNew<AdviserBookInfoDTO> listPage4SearchBook(SearchSendUserDTO searchSendUserDTO);

    void batchSendMiniUser(List<CultivateNotifySend> list);

    void sendAppletUserNotify(List<CultivateNotifySend> list);

    Long createNotify4Question(AppletNotifySendDTO newSendDTO);

    PageBeanNew<CultivateNotifyDTO> getLatestNotifyList(Long wechatUserId, Integer currentPage, Integer numPerPage);

    Long createNotify4App(AppletNotifySendDTO newSendDTO);

    void clearExpireNotifies();

    Long sendNotifyToUser(NotifySendDTO notifySendDTO);

    List<CultivateNotifyDTO> getLastNoReadNotify(Long wechatUserId);

    void insert(CultivateNotify cultivateNotify);
}
