package com.ruoyi.credit.service;

import com.ruoyi.credit.domain.ValidationRule;
import java.util.List;

/**
 * 验证规则配置Service接口
 * 
 * @author ruoyi
 * @date 2025-12-30
 */
public interface IValidationRuleService 
{
    /**
     * 查询验证规则配置
     * 
     * @param ruleId 验证规则配置主键
     * @return 验证规则配置
     */
    public ValidationRule selectValidationRuleByRuleId(Long ruleId);

    /**
     * 根据规则名称查询验证规则
     * 
     * @param ruleName 规则名称
     * @return 验证规则配置
     */
    public ValidationRule selectValidationRuleByRuleName(String ruleName);

    /**
     * 查询验证规则配置列表
     * 
     * @param validationRule 验证规则配置
     * @return 验证规则配置集合
     */
    public List<ValidationRule> selectValidationRuleList(ValidationRule validationRule);

    /**
     * 查询激活状态的验证规则列表（按优先级排序）
     * 
     * @return 激活的验证规则集合
     */
    public List<ValidationRule> selectActiveValidationRules();

    /**
     * 根据规则类型查询验证规则
     * 
     * @param ruleType 规则类型
     * @return 验证规则集合
     */
    public List<ValidationRule> selectValidationRulesByType(String ruleType);

    /**
     * 新增验证规则配置
     * 
     * @param validationRule 验证规则配置
     * @return 结果
     */
    public int insertValidationRule(ValidationRule validationRule);

    /**
     * 修改验证规则配置
     * 
     * @param validationRule 验证规则配置
     * @return 结果
     */
    public int updateValidationRule(ValidationRule validationRule);

    /**
     * 批量删除验证规则配置
     * 
     * @param ruleIds 需要删除的验证规则配置主键集合
     * @return 结果
     */
    public int deleteValidationRuleByRuleIds(Long[] ruleIds);

    /**
     * 删除验证规则配置信息
     * 
     * @param ruleId 验证规则配置主键
     * @return 结果
     */
    public int deleteValidationRuleByRuleId(Long ruleId);

    /**
     * 重新加载验证规则配置
     * 
     * @return 重新加载的规则数量
     */
    public int reloadValidationRules();

    /**
     * 验证规则配置的有效性
     * 
     * @param validationRule 验证规则配置
     * @return 验证结果消息，null表示验证通过
     */
    public String validateRuleConfiguration(ValidationRule validationRule);

    /**
     * 检查规则名称是否已存在
     * 
     * @param ruleName 规则名称
     * @param excludeRuleId 排除的规则ID（用于更新时检查）
     * @return 是否存在
     */
    public boolean checkRuleNameExists(String ruleName, Long excludeRuleId);

    /**
     * 获取下一个可用的优先级值
     * 
     * @return 下一个优先级值
     */
    public Integer getNextAvailablePriority();

    /**
     * 批量更新规则状态
     * 
     * @param ruleIds 规则ID列表
     * @param ruleStatus 新状态
     * @return 更新的记录数
     */
    public int batchUpdateRuleStatus(Long[] ruleIds, String ruleStatus);
}