package com.pcloud.book.group.biz;

import com.pcloud.book.book.dto.RaysSceneCatalogDto;
import com.pcloud.book.group.dto.AddBookGroupServeDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.BookGroupServeDTO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.dto.ResourcePageCourseDTO;
import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.entity.ResourcePage;
import com.pcloud.book.group.entity.ResourcePageCollect;
import com.pcloud.book.group.entity.ResourcePageTool;
import com.pcloud.book.group.vo.ResourceColumnAndServeVO;
import com.pcloud.book.group.vo.ResourcePageItemVO;
import com.pcloud.book.group.vo.ResourcePageOneServe;
import com.pcloud.book.group.vo.ResourcePageVO;
import com.pcloud.book.group.vo.UpdateResourceColumnVO;
import com.pcloud.book.group.vo.UpdateResourcePageVO;
import com.pcloud.channelcenter.qrcode.dto.BookSceneIdListDTO;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;

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

/**
 * @ClassName com.pcloud.book.group.biz.ResourcePageBiz
 * @Author zhuyajie
 * @Description 自有码H5页面
 * @Date 2021/3/26 15:57
 * @Version 1.0
 **/
public interface ResourcePageBiz {


    /**
     * 更新资源页设置
     * @author：zhuyajie
     * @date：2021/3/26 17:05
     *  * @param null
     */
    Long updateResourcePage(UpdateResourcePageVO updateResourcePageVO);
    /**
     * 更新资源栏目设置
     * @author：zhuyajie
     * @date：2021/3/26 17:27
     *  * @param null
     */
    void updateResourceColumn(UpdateResourceColumnVO updateResourceColumnVO) throws BizException;

    /**
     * 根据rays码id查资源页基本配置
     * @author：zhuyajie
     * @date：2021/3/26 17:49
     *  * @param null
     */
    ResourcePageVO getResourcePageByBookGroupIdOrSceneId(Long bookGroupId, Long adviserId, Long sceneId);

    /**
     * 根据rays码id查资源页栏目及资源
     * @author：zhuyajie
     * @date：2021/3/29 11:49
     *  * @param null
     */
    List<ResourceColumnAndServeVO> getColumnAndServeListByPageId(Long resourcePageId, Boolean isWechat, Long bookId, Long adviserId, Long channelId, Integer enableAdverting);
    /**
     * 根据书刊查资源页基本配置
     * @author：zhuyajie
     * @date：2021/3/30 10:25
     *  * @param null
     */
    ResourcePageVO getResourcePageByBookId(Long bookId, Long channelId, Long adviserId, Long wechatUserId);

    /**
     * 栏目分页查询
     * @author：zhuyajie
     * @date：2021/3/31 19:06
     *  * @param null
     */
    PageBeanNew<ResourcePageItemVO> listPageResourcePageItem(Integer currentPage, Integer numPerPage, Long resourcePageColumnId);

    /**
     * 根据社群码id查询
     * @author：zhuyajie
     * @date：2021/4/1 15:25
     *  * @param null
     */
    ResourcePage getPageByBookGroupId(Long bookGroupId);
    /**
     * 获取栏目及资源类型
     * @author：zhuyajie
     * @date：2021/4/1 16:17
     *  * @param null
     */
    List<Map<String,Object>> getColumnAndServeTypeList();

    /**
     * 栏目上移下移
     * @author：zhuyajie
     * @date：2021/4/2 14:53
     *  * @param null
     */
    void updateColumnSeq(Long resourcePageColumnId, String moveType);
    /**
     * 删除栏目
     * @author：zhuyajie
     * @date：2021/4/2 15:14
     *  * @param null
     */
    void deleteColumnById(Long resourcePageColumnId);
    /**
     * 更新资源页和栏目
     * @author：zhuyajie
     * @date：2021/4/6 17:09
     *  * @param null
     */
    Long updateResourcePageAndColumn(UpdateResourcePageVO updateResourcePageVO);

    /**
     * 客户端根据rays码id查资源页基本配置
     * @author：zhuyajie
     * @date：2021/4/9 17:39
     *  * @param null
     */
    ResourcePageVO getResourcePageByBookGroupIdOrSceneId4Wechat(Long bookGroupId, Long wechatUserId, Long sceneId);

    /**
     * 资源数量
     * @author：zhuyajie
     * @date：2021/4/16 13:39
     *  * @param null
     */
    Integer getResourceCounts(Long bookId, Long adviserId, Long channelId);

    /**
     * 查应用作品资源
     * @author：zhuyajie
     * @date：2021/4/17 13:12
     *  * @param null
     */
    List<BookGroupServe> getServeListByBookGroupId(Long bookGroupId);
    /**
     * 批量更新资源页应用作品链接
     * @author：zhuyajie
     * @date：2021/5/27 1:14
     *  * @param null
     */
    void batchUpdateResourceUrl(List<Long> sceneIdList);


    /**
     * 根据书籍id和channel获取资源配置页
     * @param adviserBookId
     * @param channelId
     * @return
     */
    ResourcePageVO getResourcePageByBookIdAndChannelId(Long adviserBookId, Long channelId);
    /**
     * 查资源配置
     * @author：zhuyajie
     * @date：2021/4/21 14:42
     *  * @param null
     */
    List<BookGroupServe> getServeListByBookGroupAndSceneIds(List<Long> bookGroupIds, List<Long> sceneIds);

    /**
     * 是否只配了一个应用/作品
     * @author：zhuyajie
     * @date：2021/4/21 15:09
     *  * @param null
     */
    ResourcePageOneServe hasOneResource(Long bookGroupId, Long sceneId);

    /**
     * 自有码配置的资源列表
     * @author：zhuyajie
     * @date：2021/4/21 17:52
     *  * @param null
     */
    Map<Long, List<BookGroupServeDTO>> mapSceneServeList(List<Long> sceneIds);

    /**
     * 根据配置的公众号查资源页
     * @author：zhuyajie
     * @date：2021/4/26 9:10
     *  * @param null
     */
    ResourcePage getPageByOfficialScene(Long officialSceneId);

    /**
     * 添加收藏记录
     * @author：zhuyajie
     * @date：2021/4/26 15:36
     *  * @param null
     */
    void addCollectRecord(ResourcePageCollect resourcePageCollect);
    /**
     * 同步渠道资源到H5资源页
     * @author：zhuyajie
     * @date：2021/4/30 10:28
     *  * @param null
     */
    void batchAddResource(List<AddBookGroupServeDTO> list, Long adviserId);

    /**
     * 筛选开启小睿的码
     * @author：zhuyajie
     * @date：2021/4/30 14:26
     *  * @param null
     */
    List<Long> getOpenRaysSceneIds(List<Long> sceneIds);

    /**
     * 批量更新bookgroup对应的sceneId
     * @author：zhuyajie
     * @date：2021/4/30 19:52
     *  * @param null
     */
    void batchUpdateSceneIdByBookGroup(List<AddBookGroupServeDTO> list);

    /**
     * 获取h5页面配了这个资源的二维码集合
     */
    List<Long> getSceneIdsByResourceId(Long resourceId);
    /**
     * 更新书刊id
     * @author：zhuyajie
     * @date：2021/5/11 18:46
     *  * @param null
     */
    void batchUpdateBookId(List<BookSceneIdListDTO> requestDto);

    /**
     * 书刊下开启小睿的资源页资源
     * @author：zhuyajie
     * @date：2021/5/11 19:46
     *  * @param null
     */
    List<BookServeDTO> getBookAndBookGroupServeIds(Long adviserId, Long bookId, Long channelId);


    /**
     * 查用户H5资源页工具列表
     * @author：zhuyajie
     * @date：2021/5/12 17:45
     *  * @param null
     */
    List<ResourcePageTool> getToolListByUser(Long wechatUserId, Long officialAccountsId);

    /**
     * 资源广场模块
     * @author：zhuyajie
     * @date：2021/5/13 11:26
     *  * @param null
     */
    List<Map<String,Object>> getResourceSourceTypeList(Long wechatUserId, Long officialAccountsId);

    /**
     * 查用户学龄段
     * @author：zhuyajie
     * @date：2021/5/13 15:40
     *  * @param null
     */
    Long getUserGrade(Long wechatUserId, Long officialAccountsId);

    /**
     * 添加课程统计数据
     * @author：zhuyajie
     * @date：2021/5/17 15:11
     *  * @param null
     */
    void insertCourseStatistic();

    /**
     * H5首页-根据用户年级查推荐课程
     * @author：zhuyajie
     * @date：2021/5/17 17:07
     *  * @param null
     */
    PageBeanNew<ResourcePageCourseDTO> listCourseByUser(Long wechatUserId, Long officialAccountsId, Integer currentPage, Integer numPerPage);

    /**
     * 查年级标签对应的用户年级
     * @author：zhuyajie
     * @date：2021/5/18 18:58
     *  * @param null
     */
    Long getGradeByGradeLabelId(Long graLabelId);

    /**
     * 查深度标签对应的用户年级
     * @author：zhuyajie
     * @date：2021/5/18 19:20
     *  * @param null
     */
    Long getGradeByDepLabelId(Long depLabelId);
    /**
     * 书刊是否开启小睿
     * @author：zhuyajie
     * @date：2021/5/25 11:00
     *  * @param null
     */
    Boolean isOpenRaysBook(Long bookId, Long channelId, Long adviserId);
    /**
     * 获取用户H5新用户状态
     * @author：zhuyajie
     * @date：2021/5/27 10:39
     *  * @param null
     */
    Map<String, Object> getUserNewState(Long wechatUserId);

    /**
     * 添加新用户记录
     * @author：zhuyajie
     * @date：2021/4/26 15:36
     *  * @param null
     */
    void addNewUserRecord(ResourcePageCollect resourcePageCollect);
    /**
     * 查二维码是否开启小睿
     * @author：zhuyajie
     * @date：2021/5/27 11:52
     *  * @param null
     */
    Boolean isOpenRaysScene(Long sceneId, Long bookGroupId);

    /**
     * 筛选展示开启资源目录展示的图书
     */
    List<String> mapCatalogBook(List<Long> bookIds, Long adviserId);

    List<RaysSceneCatalogDto> listRaysSceneCatalogDto(List<Long> sceneIds);

    /**
     * rays码下面资源数量
     * @param adviserIds
     * @param bookIds
     * @param channelIds
     */
    Map<String, BookGroupServeCountDTO> mapRaysCodeServeCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds);
}
