package org.dromara.mp.service;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 微信公众号数据统计服务接口
 *
 * @author pengles
 */
public interface WxMpStatisticsService {

    /**
     * 获取用户增减数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 用户增减数据
     */
    List<Map<String, Object>> getUserSummary(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取用户累计数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 用户累计数据
     */
    List<Map<String, Object>> getUserCumulate(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文群发每日数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文群发数据
     */
    List<Map<String, Object>> getArticleSummary(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文群发总数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文群发总数据
     */
    List<Map<String, Object>> getArticleTotal(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文统计数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文统计数据
     */
    List<Map<String, Object>> getUserRead(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文统计分时数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文统计分时数据
     */
    List<Map<String, Object>> getUserReadHour(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文分享转发数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文分享转发数据
     */
    List<Map<String, Object>> getUserShare(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取图文分享转发分时数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 图文分享转发分时数据
     */
    List<Map<String, Object>> getUserShareHour(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取消息发送概况数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 消息发送概况数据
     */
    List<Map<String, Object>> getUpstreamMsg(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取消息分送分时数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 消息分送分时数据
     */
    List<Map<String, Object>> getUpstreamMsgHour(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取消息关键词发送概况
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 消息关键词发送概况
     */
    List<Map<String, Object>> getUpstreamMsgWeek(LocalDate beginDate, LocalDate endDate);


    /**
     * 获取菜单分析数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 菜单分析数据
     */
    List<Map<String, Object>> getMenuSummary(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取统计概览数据
     *
     * @return 统计概览
     */
    Map<String, Object> getStatisticsOverview();

    /**
     * 获取用户画像数据
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @return 用户画像数据
     */
    Map<String, Object> getUserPortrait(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取热门内容排行
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @param limit     限制数量
     * @return 热门内容排行
     */
    List<Map<String, Object>> getPopularContent(LocalDate beginDate, LocalDate endDate, int limit);

    /**
     * 获取关键词统计
     *
     * @param beginDate 开始日期
     * @param endDate   结束日期
     * @param limit     限制数量
     * @return 关键词统计
     */
    List<Map<String, Object>> getKeywordStatistics(LocalDate beginDate, LocalDate endDate, int limit);
}