package org.xyzh.achievement.checker;

import org.xyzh.common.core.enums.AchievementEventType;
import org.xyzh.common.core.event.AchievementEvent;
import org.xyzh.common.dto.usercenter.TbAchievement;

/**
 * @description 成就检测器接口 - 策略模式
 * @filename AchievementChecker.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-24
 */
public interface AchievementChecker {

    /**
     * @description 判断该检测器是否支持该成就类型
     * @param achievement 成就
     * @return boolean 是否支持
     */
    boolean supports(TbAchievement achievement);

    /**
     * @description 判断该检测器是否支持该事件类型
     * @param eventType 事件类型
     * @return boolean 是否支持
     */
    boolean supportsEventType(AchievementEventType eventType);

    /**
     * @description 检查用户是否满足成就条件
     * @param event 成就事件
     * @param achievement 成就定义
     * @param currentProgress 当前进度值
     * @return boolean 是否满足条件
     */
    boolean check(AchievementEvent event, TbAchievement achievement, Integer currentProgress);

    /**
     * @description 计算新的进度值
     * @param event 成就事件
     * @param currentProgress 当前进度值
     * @return Integer 新的进度值
     */
    Integer calculateNewProgress(AchievementEvent event, Integer currentProgress);
}

