package org.xyzh.achievement.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.usercenter.TbUserAchievementProgress;

import java.util.List;

/**
 * @description 用户成就进度数据访问层
 * @filename UserAchievementProgressMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-24
 */
@Mapper
public interface UserAchievementProgressMapper extends BaseMapper<TbUserAchievementProgress> {

    /**
     * @description 根据用户ID和成就ID查询进度
     * @param userId 用户ID
     * @param achievementId 成就ID
     * @return TbUserAchievementProgress 成就进度
     */
    TbUserAchievementProgress selectByUserIdAndAchievementId(@Param("userId") String userId, @Param("achievementId") String achievementId);

    /**
     * @description 根据用户ID查询所有进度
     * @param userId 用户ID
     * @return List<TbUserAchievementProgress> 成就进度列表
     */
    List<TbUserAchievementProgress> selectByUserId(@Param("userId") String userId);

    /**
     * @description 根据用户ID和条件类型查询进度
     * @param userId 用户ID
     * @param conditionType 条件类型
     * @return List<TbUserAchievementProgress> 成就进度列表
     */
    List<TbUserAchievementProgress> selectByUserIdAndConditionType(@Param("userId") String userId, @Param("conditionType") Integer conditionType);

    /**
     * @description 查询未完成的进度
     * @param userId 用户ID
     * @return List<TbUserAchievementProgress> 成就进度列表
     */
    List<TbUserAchievementProgress> selectIncompletedByUserId(@Param("userId") String userId);

    /**
     * @description 插入进度记录
     * @param progress 成就进度
     * @return int 影响行数
     */
    int insertProgress(TbUserAchievementProgress progress);

    /**
     * @description 更新进度记录
     * @param progress 成就进度
     * @return int 影响行数
     */
    int updateProgress(TbUserAchievementProgress progress);

    /**
     * @description 增加进度值
     * @param userId 用户ID
     * @param achievementId 成就ID
     * @param incrementValue 增量值
     * @return int 影响行数
     */
    int incrementProgress(@Param("userId") String userId, @Param("achievementId") String achievementId, @Param("incrementValue") Integer incrementValue);

    /**
     * @description 批量插入进度记录
     * @param progressList 成就进度列表
     * @return int 影响行数
     */
    int batchInsertProgress(@Param("progressList") List<TbUserAchievementProgress> progressList);

    /**
     * @description 删除进度记录
     * @param userId 用户ID
     * @param achievementId 成就ID
     * @return int 影响行数
     */
    int deleteProgress(@Param("userId") String userId, @Param("achievementId") String achievementId);
}

