package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.CommonPushTask;
import shop.alien.entity.store.vo.CommonPushFunnelVo;
import shop.alien.entity.store.vo.CommonPushReportVo;
import shop.alien.entity.store.vo.CommonPushTaskStatisticsPageVo;
import shop.alien.store.dto.CommonPushSendResultDto;
import shop.alien.store.dto.CommonPushTestSendDto;

import java.util.Date;

public interface CommonPushTaskService extends IService<CommonPushTask> {

    R<String> add(CommonPushTask task);

    /**
     * 保存草稿（status=0），不进行 AI 审核与推送发送。
     */
    R<Long> saveDraft(CommonPushTask task);

    R<String> deleteById(Long id);

    R<String> update(CommonPushTask task);

    R<CommonPushTask> getInfoById(Long id);

    R<IPage<CommonPushTask>> list(Integer pageNum, Integer pageSize, String taskNo, String title, String status, Integer pushType);

    R<CommonPushTaskStatisticsPageVo> statisticsList(Integer pageNum, Integer pageSize, String taskNo, String keyword,
                                                     String status, Integer pushType, String channel,
                                                     Date startTime, Date endTime);

    R<CommonPushFunnelVo> funnel(String phoneType, Date startTime, Date endTime);

//    R<CommonPushReportVo> report(Integer reportType, Date reportDate);

    R<CommonPushSendResultDto> sendTest(CommonPushTestSendDto dto);

    /**
     * 执行到期的定时推送任务（供 XXL-JOB 调用）。
     *
     * @return 本次成功发送的任务数
     */
    int executeScheduledPushTasks();

    /**
     * 同步已发送任务的厂商推送统计数据（供 XXL-JOB 调用）。
     *
     * @return 本次成功更新的任务数
     */
    int syncPushTaskStatistics();

    R<CommonPushReportVo> report(Integer reportType);
}
