package com.pcloud.book.applet.biz;

import com.pcloud.book.applet.dto.AppletNewsClassifyDTO;
import com.pcloud.book.applet.dto.AppletNewsCommentDTO;
import com.pcloud.book.applet.dto.AppletNewsCustomTagDTO;
import com.pcloud.book.applet.dto.AppletNewsDTO;
import com.pcloud.book.applet.dto.AppletNewsVO;
import com.pcloud.book.applet.entity.AppletLinkClick;
import com.pcloud.book.applet.entity.AppletNews;
import com.pcloud.book.applet.entity.AppletNewsClassify;
import com.pcloud.book.applet.entity.AppletNewsComment;
import com.pcloud.book.applet.entity.AppletNewsCustomTag;
import com.pcloud.book.applet.vo.AppletNewsClassifyVO;
import com.pcloud.book.applet.vo.AppletNewsShowStateVO;
import com.pcloud.common.page.PageBeanNew;

import java.util.List;
import java.util.Map;

/**
 * 小程序资讯
 */
public interface AppletNewsBiz {

    /**
     * 新增资讯分类
     * @param appletNewsClassify
     * @return
     */
    Long addAppletNewsClassify(AppletNewsClassify appletNewsClassify);

    /**
     * 修改资讯分类
     * @param appletNewsClassify
     */
    void updateAppletNewsClassify(AppletNewsClassify appletNewsClassify);

    /**
     * 删除资讯分类
     * @param id
     */
    void deleteNewsClassifyById(Long id);

    /**
     * 资讯栏目列表
     * @param currentPage
     * @param numPerPage
     * @return
     */
    PageBeanNew<AppletNewsClassifyDTO> listNewsClassify(Integer currentPage, Integer numPerPage, String name);

    /**
     * 添加资讯
     * @param appletNews
     * @return
     */
    Long addAppletNews(AppletNews appletNews);

    /**
     * 修改资讯
     * @param appletNews
     */
    void updateAppletNews(AppletNews appletNews);

    /**
     * 删除资讯
     * @param id
     */
    void deleteAppletNewsById(Long id);

    /**
     * 资讯列表
     * @param currentPage
     * @param numPerPage
     * @param name
     * @return
     */
    PageBeanNew<AppletNewsDTO> listAppletNews(Integer currentPage, Integer numPerPage, String name,
                                             Long firstClassify,Long secondClassify,Long gradeLabelId,
                                              Long subjectLabelId,Long rightsClassifyId,String source,Integer showState, Long newsClassifyId,
                                              Long customTagId);

    /**
     * 获取所有资讯栏目
     * @return
     */
    List<AppletNewsClassifyDTO> getAllNewsClassify(Boolean showState);

    /**
     * 客户端资讯列表
     * @param currentPage
     * @param numPerPage
     * @param newsClassifyId
     * @return
     */
    PageBeanNew<AppletNewsDTO> listAppletNews4Wechat(Integer currentPage, Integer numPerPage, Long newsClassifyId, Long wechatUserId);

    /**
     * 添加资讯评论
     * @param appletNewsComment
     */
    void addAppletNewsComment(AppletNewsComment appletNewsComment, Long wechatUserId);

    /**
     * 查询资讯评论
     * @param currentPage
     * @param numPerPage
     * @return
     */
    PageBeanNew<AppletNewsCommentDTO> listNewsCommentByNewsId(Integer currentPage, Integer numPerPage, Long newsId);

    /**
     * 根据id查资讯详情
     * @param id
     * @return
     */
    AppletNewsDTO getNewsById(Long id);

    /**
     * 更新上架状态
     * @param appletNews
     */
    void updateNewsShowState(AppletNews appletNews);

    /**
     * 根据书刊分类标签权益分类查询
     * @param firstClassify
     * @param secondClassify
     * @param gradeLabelId
     * @param subjectLabelId
     * @param rightsType
     * @return
     */
    List<AppletNewsDTO> getNewsByTempletLabel(Long firstClassify, Long secondClassify, Long gradeLabelId, Long subjectLabelId, String rightsType);

    /**
     * 批量修改分类
     * @param appletNewsClassifyVO
     */
    void batchUpdateClassify(AppletNewsClassifyVO appletNewsClassifyVO);

    void batchUpdateShowState(AppletNewsShowStateVO appletNewsShowStateVO);

    void batchDeleteAppletNews(List<Long> appletNewsIds);


    /**
     * 根据id查询
     * @author：zhuyajie
     * @date：2020/4/26
     *  * @param null
     */
    AppletNewsVO getNewsVOById(Long newsId);

    /**
     * 资讯来源列表
     * @author：zhuyajie
     * @date：2020/4/27 14:46
     *  * @param null
     */
    List<String> getNewsSourceList();


    /**
     * 资讯和券的资源外链访问埋点
     * @author：zhuyajie
     * @date：2020/5/11 14:11
     *  * @param null
     */
    void addClickRecord(AppletLinkClick appletLinkClick);
    /**
     * 根据跳转地址查询链接编号
     * @author：zhuyajie
     * @date：2020/5/11 17:39
     *  * @param null
     */
    String getUrlNumberByUrl(String jumpUrl);
    /**
     * 用户选择资讯栏目
     * @author：zhuyajie
     * @date：2020/5/14 11:21
     *  * @param null
     */
    void addUserNewsClassify(List<Long> newsClassifyIds, Long wechatUserId);
    /**
     * 所有资讯栏目列表+用户选择的资讯栏目
     * @author：zhuyajie
     * @date：2020/5/14 11:21
     *  * @param null
     */
    List<AppletNewsClassifyDTO> getAllNewsClassify4Wechat(Long wechatUserId);
    /**
     * 用户选择的资讯栏目
     * @author：zhuyajie
     * @date：2020/5/14 11:21
     *  * @param null
     */
    List<AppletNewsClassifyDTO> getNewsClassifyByUser(Long wechatUserId);

    /**
     * 资讯统计分析
     * @author：zhuyajie
     * @date：2020/5/11 19:54
     *  * @param null
     */
    PageBeanNew<AppletNewsDTO> listAppletNews4Analysis(Integer currentPage, Integer numPerPage, String name,
                                              Long firstClassify,Long secondClassify,Long gradeLabelId,
                                              Long subjectLabelId,Integer linkOnly,Long rightsClassifyId,
                                              String source,Integer browseQty,Integer clickQty);

    /**
     *
     * @param appletNewsId
     * @return
     */
    Map<Long, AppletNewsDTO> getByIds(List<Long> appletNewsId);

    /**
     * 批量修改资讯栏目
     * @author：zhuyajie
     * @date：2020/5/26
     *  * @param null
     */
    void batchUpdateNewsClassify(AppletNewsClassifyVO appletNewsClassifyVO);

    /**
     * 批量更新自定义标识
     * @author：zhuyajie
     * @date：2020/6/9 17:52
     *  * @param null
     */
    void batchUpdateCustomTagId(List<Long> ids, Long customTagId, String customTag);
    /**
     * 新增自定义标识
     * @author：zhuyajie
     * @date：2020/6/9 17:52
     *  * @param null
     */
    Long insertCustomTag(AppletNewsCustomTag appletNewsCustomTag);
    /**
     * 修改自定义标识
     * @author：zhuyajie
     * @date：2020/6/9 17:52
     *  * @param null
     */
    void updateCustomTag(AppletNewsCustomTag appletNewsCustomTag);
    /**
     * 自定义标识列表
     * @author：zhuyajie
     * @date：2020/6/9 17:52
     *  * @param null
     */
    List<AppletNewsCustomTagDTO> getCustomTagList();
    /**
     * 根据标识id查资讯id列表
     * @author：zhuyajie
     * @date：2020/6/10 17:39
     *  * @param null
     */
    List<Long> getNewsIdListByCustomTagId(Long customTagId);
}
