package com.ylx.point.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ylx.point.domain.PointUserActivityTaskCompletion;
import com.ylx.point.domain.vo.PointActivityOverviewVO;

import java.util.List;

/**
 * 用户活动任务完成Service接口
 *
 * @author wzj
 * @date 2026-03-25
 */
public interface IPointUserActivityTaskCompletionService extends IService<PointUserActivityTaskCompletion> {

    PointActivityOverviewVO getPointActivityOverviewByActivityId(Long activityId);

    Integer selectCompletedTaskCount(String openId);

    List<PointUserActivityTaskCompletion> selectCompletionsByOpenIdAndTaskIds(String openId, List<Long> taskIds);

    /**
     * 判断用户今日是否已完成该任务（用于每日一次任务、每日签到）
     */
    boolean isTodayCompleted(String openId, Long activityId, Long taskId, Integer taskType);

    /**
     * 任务完成后调用：次数+1，更新最后完成时间
     */
    void completeTask(String openId, Long activityId, Long taskId, Integer taskType);

    /**
     * 获取用户累计完成次数
     */
    int getUserTaskTotalCount(String openId, Long activityId, Long taskId, Integer taskType);

    void executeTask(Long taskId);

    /**
     * 按照活动类型优先级（新手活动、每日活动、每月活动）完成订单任务并添加积分
     * @param openId 用户openId
     */
    void completeOrderTaskByPriority(String openId);

    /**
     * 按照活动类型优先级（新手活动、每日活动、每月活动）完成充值任务并添加积分
     * @param openId 用户openId
     */
    void completeRechargeTaskByPriority(String openId);
}
