package com.ruoyi.ai.service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.ai.domain.AiStatistics;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.ai.domain.MapValue;

/**
 * ai-统计Service接口
 * 
 * @author shi
 * @date 2025-11-29
 */
public interface IAiStatisticsService {

    /**
     * 查询ai-统计
     * 
     * @param dateKey ai-统计主键
     * @return ai-统计
     */
    AiStatistics selectAiStatisticsByDateKey(String dateKey);

    /**
     * 查询ai-统计列表
     * 
     * @param aiStatistics ai-统计
     * @return ai-统计集合
     */
    List<AiStatistics> selectAiStatisticsList(AiStatistics aiStatistics);

    /**
     * 分页查询ai-统计列表
     *
     * @param aiStatistics ai-统计
     * @return ai-统计集合
     */
    IPage<AiStatistics> selectAiStatisticsPage(Page page, AiStatistics aiStatistics);

    /**
     * 新增ai-统计
     * 
     * @param aiStatistics ai-统计
     * @return 结果
     */
    int insertAiStatistics(AiStatistics aiStatistics);

    /**
     * 修改ai-统计
     * 
     * @param aiStatistics ai-统计
     * @return 结果
     */
    int updateAiStatistics(AiStatistics aiStatistics);

    /**
     * 批量删除ai-统计
     * 
     * @param dateKeys 需要删除的ai-统计主键集合
     * @return 结果
     */
    int deleteAiStatisticsByDateKeys(String[] dateKeys);

    /**
     * 删除ai-统计信息
     * 
     * @param dateKey ai-统计主键
     * @return 结果
     */
    int deleteAiStatisticsByDateKey(String dateKey);

    void saveOrUpdateData(AiStatistics aiStatistics);

    AiStatistics getTitleTotal();

    List<Long> getTodayHourlyAddUserWithZero(String source);

    List<Long> getWeeklyAddUserCount(String source);

    List<Long> getMonthlyAddUserCount(String source);

    List<Long> getMonthlyAddUserCountByRange(String source, Date startDate, Date endDate);

    List<String> getAllSource();

    List<Long> getTodayHourlyRechargeWithZero(String source);

    List<Long> getWeeklyRecharge(String source);

    List<Long> getMonthlyRecharge(String source);

    List<Long> getMonthlyRechargeByRange(String source, Date startDate, Date endDate);

    List<Long> getTodayHourlyVisitorWithZero(String source);

    List<Long> getWeeklyVisitor(String source);

    List<Long> getMonthlyVisitor(String source);

    List<Long> getMonthlyVisitorByRange(String source, Date startDate, Date endDate);

    List<Long> getTodayHourlyGenerateWithZero(String source);

    List<Long> getWeeklyGenerate(String source);

    List<Long> getMonthlyGenerate(String source);

    List<Long> getMonthlyVisitorGenerate(String source, Date startDate, Date endDate);

    List<MapValue> getMapStatistics();
}
