package com.jeesharp.business.modules.member.service;

import com.jeesharp.business.modules.member.entity.MemberPointsRule;
import com.jeesharp.business.modules.member.entity.MemberPointsRuleLevel;
import com.jeesharp.business.modules.member.vo.MemberPointsRuleQueryVO;
import com.jeesharp.framework.pojo.Page;

import java.util.List;

/**
 * 积分规则领域服务：按场景加载规则与等级明细。
 *
 * @author jeesharp
 * @since 2026-06-23
 */
public interface MemberPointsRuleService {

    /**
     * 获取启用的场景规则。
     */
    MemberPointsRule getEnabledBySceneCode(String sceneCode);

    /**
     * 规则下全部启用的等级明细。
     */
    List<MemberPointsRuleLevel> listEnabledLevels(String ruleId);

    /**
     * 按等级解析明细（先 levelId，再默认第一条）。
     */
    MemberPointsRuleLevel resolveLevelDetail(String ruleId, String levelId);

    /**
     * 分页查询规则。
     */
    Page<MemberPointsRule> findPage(Page<MemberPointsRule> page, MemberPointsRuleQueryVO query);

    /**
     * 按主键查询规则。
     */
    MemberPointsRule getRule(String id);

    /**
     * 场景编码是否已存在。
     */
    boolean existsSceneCode(String sceneCode, String excludeId);

    /**
     * 新增规则。
     */
    MemberPointsRule createRule(MemberPointsRule rule);

    /**
     * 更新规则。
     */
    void updateRule(MemberPointsRule rule);

    /**
     * 批量删除规则（逻辑删除）。
     */
    void batchDeleteRules(List<String> ids);

    /**
     * 规则下全部等级明细（管理端编辑用）。
     */
    List<MemberPointsRuleLevel> listLevelsByRuleId(String ruleId);

    /**
     * 替换规则下全部等级明细。
     */
    void replaceRuleLevels(String ruleId, List<MemberPointsRuleLevel> levels);
}
