package com.pig4cloud.pig.statistics.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pig.statistics.api.dto.user.*;
import com.pig4cloud.pig.statistics.api.vo.user.*;
import jakarta.validation.Valid;

import java.util.List;

/**
 * @author: lwh
 * @date: 2025-08-06
 * @description: 用户分析Service
 */

public interface UserAnalyseService {

	/**
	 * 获取新增趋势
	 * @param reqDto 请求参数
	 * @return GetNewUserTrendVO
	 */
	GetNewUserTrendVO getNewUserTrend(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 分页查询新增趋势详情
	 * @param reqDto 请求参数
	 * @return Page
	 */
	Page<PageNewUserTrendDetailVO> pageNewUserTrendDetail(@Valid PageUserAnalyseDTO reqDto);

	/**
	 * 查询次日留存率
	 * @param reqDto 查询次日留存率入参
	 * @return GetNewUserRetentionVO
	 */
	GetNewUserRetentionVO getNewUserRetention(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 分页查询次日留存率详情
	 * @param reqDto 分页查询次日留存率详情入参
	 * @return Page
	 */
	Page<PageRetentionDetailVO> pageNewUserRetentionDetail(@Valid PageUserAnalyseDTO reqDto);


	/************************************** 活跃用户 *****************************************
	 * 获取活跃趋势
	 * @param reqDto 入参
	 * @return GetNewUserTrendVO
	 */
	GetNewUserTrendVO getActiveTrend(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 获取活跃构成
	 * @param reqDto 入参
	 * @return GetActiveComposeVO
	 */
	GetActiveUserBaseVO getActiveCompose(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 获取活跃粘度
	 * @param reqDto 入参
	 * @return GetActiveUserBaseVO
	 */
	GetActiveUserBaseVO getActiveViscosity(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 查询周活跃率
	 * @param reqDto 入参
	 * @return GetActiveUserBaseVO
	 */
	GetActiveUserBaseVO getActiveWeekRate(@Valid UserAnalyseQueryBaseDTO reqDto);


	/**
	 * 查询月活跃率
	 * @param reqDto 入参
	 * @return GetActiveUserBaseVO
	 */
	GetActiveUserBaseVO getActiveMonthRate(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 分页查询活跃详情
	 * @param reqDto 入参
	 * @return Page
	 */
	Page<PageActiveDetailVO> pageActiveDetail(@Valid PageUserAnalyseDTO reqDto);

	/************************************** 启动次数 *****************************************
	 * 查询启动次数趋势
	 * @param reqDto 入参
	 * @return GetNewUserTrendVO
	 */
	GetNewUserTrendVO getLaunchTrend(@Valid UserAnalyseQueryBaseDTO reqDto);

	/**
	 * 分页查询启动次数详情
	 * @param reqDto 入参
	 * @return Page
	 */
	Page<PageLaunchDetailVO> pageLaunchDetail(@Valid PageUserAnalyseDTO reqDto);

	/************************************** 版本分布 *****************************************
	 * 分页查询全部版本详情
	 * @param reqDto 入参
	 * @return Page
	 */
	Page<PageAllVersionDetailVO> pageAllVersionDetail(@Valid PageAllVersionDetailDTO reqDto);

	/**
	 * 分页查询单版本详情
	 * @param reqDto 入参
	 * @return Page
	 */
	Page<PageSingleVersionDetailVO> pageSingleVersionDetail(@Valid PageUserAnalyseDTO reqDto);

	/**
	 * 查询版本用户来源
	 * @param reqDto 入参
	 * @return GetVersionDistributionVO
	 */
	List<GetVersionDistributionVO> getVersionDistribution(@Valid GetVersionDistributionDTO reqDto);

	/**
	 * 分页查询版本用户来源详情
	 * @param reqDto 入参
	 * @return Page
	 */
	Page<PageVersionDistributionDetailVO> pageVersionDistributionDetail(@Valid PageVersionDistributionDetailDTO reqDto);

	/**
	 * 获取应用版本列表
	 * @param appId 应用ID
	 * @return List
	 */
	List<String> getVersionList(String appId);

	/**
	 * 获取应用渠道列表
	 * @param appId 应用ID
	 * @return List
	 */
	List<String> getChannelList(String appId);
}
