package com.brilliance.isc.warn;

import com.brilliance.isc.exception.SSTFException;
import com.brilliance.isc.vo.WarnVo;

import java.util.List;

public interface WarnService {
    /**
     * 设置重要警告
     * @param id
     * @param message
     */
    @Deprecated
    void importantWarn(String id,String message);
    /**
     * 设置重要警告
     * @param id
     * @param message
     */
    @Deprecated
    void importantWarn(String id, String subId, String source, String message);

    /**
     * 设置重要警告(新版)
     */
    void importantWarn(String id, String subId, String source, String message,Object[] val);
    /**
     * 设置一般警告
     * @param id
     * @param message
     */
    @Deprecated
    void generalWarn(String id,String message);
    /**
     * 设置一般警告
     * @param id
     * @param message
     */
    @Deprecated
    void generalWarn(String id, String subId, String source, String message);
    /**
     * 设置一般警告(新版)
     */
    void generalWarn(String id, String subId, String source, String message,Object[] val);
    /**
     * 设置提示警告
     * @param id
     * @param message
     */
    @Deprecated
    void tipWarn(String id,String message);
    /**
     * 设置提示警告
     * @param id
     * @param message
     */
    @Deprecated
    void tipWarn(String id, String subId, String source, String message);

    /**
     * 设置提示警告(新版)
     */
    void tipWarn(String id, String subId, String source, String message,Object[] val);

    /**
     * 返回所有的警告信息
     * @return
     */
    List<WarnVo> getAndClearTotalWarns();
    /**
     * 返回所有的警告信息
     * @return
     */
    List<WarnVo> getTotalWarns();

    /**
     * 清除所有的警告信息
     */
    void clearWarn();

    /**
     * 放置警告信息列表，多用于SPT TAKE、快照回显
     */
    void putWarnList(List<WarnVo> warnList);

    boolean checkWarningBalance(List<WarnVo> oldWarningList);

    /**
     * 设置警告信息
     */
    default void registerWarn(String level, String id, String subId, String source, String message) {
        registerWarn(level,id,subId,source,message,new Object[0]);
    }

    /**
     * 设置警告信息
     */
    default void registerWarn(String level, String id, String subId, String source, String message ,Object[] val) {
        switch (level) {
            case WarnVo.LEVEL_IMPORTANT:
                importantWarn(id, subId, source, message, val);
                break;
            case WarnVo.LEVEL_GENERAL:
                generalWarn(id, subId, source, message, val);
                break;
            case WarnVo.LEVEL_TIPS:
                tipWarn(id, subId, source, message, val);
                break;
            default:
                throw new SSTFException("9999", "无效的警告级别");
        }
    }
    @Deprecated
    void buildwarning(String level, String id, String subId, String source, String message);
    void buildwarning(String level, String id, String subId, String source, String message, Object[] val);
}
