package com.pig4cloud.pig.marketing.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.marketing.api.dto.app.*;
import com.pig4cloud.pig.marketing.api.vo.app.PageMarketingAppsVO;
import com.pig4cloud.pig.marketing.api.vo.app.PageStatAppFirstMktDataVO;
import com.pig4cloud.pig.marketing.api.vo.app.PageStatAppSecondMktDataVO;
import jakarta.validation.Valid;

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

/**
 * @author: lwh
 * @date: 2025-07-22
 * @description: 应用列表Service
 */

public interface MarketingAppsService {

	/**
	 * 分页查询应用列表
	 * @param reqDto 查询参数
	 * @return Page
	 */
	Page pageMarketingApps(PageMarketingAppsDTO reqDto, Boolean status);

	/**
	 * 根据ID获取应用详情
	 * @param id 应用ID
	 * @return 应用详情
	 */
	PageMarketingAppsVO getMarketingAppById(Long id);

	/**
	 * 批量更新应用信息
	 * @param reqDtoList 批量更新参数
	 * @return List<Long>
	 */
	R batchUpdateMarketingApps(List<BatchUpdateMarketingAppsDTO> reqDtoList);

	/**
	 * 设置应用信息
	 * @param reqDto 应用信息
	 * @return Boolean
	 */
	Boolean setMarketingAppsInfo(SetMarketingAppsDTO reqDto);

	/**
	 * 设置应用状态
	 * @param reqDto 设置参数
	 * @return  Boolean
	 */
	Boolean setAppStatusById(SetMarketingAppsStatusDTO reqDto);

	/**
	 * 同步应用列表
	 * @return Map<String, Integer>
	 */
	Map<String, Integer> syncedAppList();

	/**
	 * 修改应用ip列表
	 * @param reqDto 修改参数
	 * @return R
	 */
	R modMarketingAppsIps(@Valid ModMarketingAppsIpDTO reqDto);

	/**
	 * 修改应用域名列表
	 * @param reqDto 修改参数
	 * @return R
	 */
	R modMarketingAppsDomains(@Valid ModMarketingAppsDomainDTO reqDto);

	/**
	 * 分页统计应用一级营销数据
	 * @param reqDto 查询参数
	 * @return 一级营销数据
	 */
	Page<PageStatAppFirstMktDataVO> pageStatAppFirstMktData(PageStatAppMktDataDTO reqDto);

	/**
	 * 分页统计应用二级营销数据
	 * @param reqDto 统计参数
	 * @param ip ip
	 * @return 二级营销数据
	 */
	Page<PageStatAppSecondMktDataVO> pageStatAppSecondMktData(PageStatAppMktDataDTO reqDto, String ip);

	/**
	 * 校验IP冲突
	 * @return Boolean
	 */
	Boolean checkIp(MarketingAppsIpDTO ipDto, Long appId, Boolean isConfig);

	/**
	 * 校验域名冲突
	 * @return Boolean
	 */
	Boolean checkDomain(MarketingAppsDomainDTO domainDTO, Long appId, Boolean isConfig);
}
