package cn.fateverse.workflow.process;

import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
 * 流程引擎函数工具类
 *
 * @author Clay
 * @date 2022/12/30
 */
@Component
public class ProcessUtil {

    /**
     * 字符串是否等于
     *
     * @param controlId 控制id
     * @param value     需要检测的值
     * @return 返回结果
     */
    public Boolean strEqualsMethod(String controlId, String value) {
        return value.equals(controlId);
    }


    /**
     * 字符串是否包含函数
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean strArrContainsMethod(String controlId, String... values) {
        List<String> valueList = Arrays.asList(values);
        return valueList.contains(controlId);
    }

    /**
     * 数值类型是否包含函数
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean numberContainsMethod(Number controlId, Number... values) {
        List<Number> valueList = Arrays.asList(values);
        return valueList.contains(controlId);
    }

    /**
     * 判断B模式
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean b(String controlId, Number... values) {
        List<Number> valueList = Arrays.asList(values);
        long value = Long.parseLong(controlId);
        return value > valueList.get(0).longValue() && value < valueList.get(1).longValue();
    }

    /**
     * 判断AB模式
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean ab(String controlId, Number... values) {
        List<Number> valueList = Arrays.asList(values);
        long value = Long.parseLong(controlId);
        return value >= valueList.get(0).longValue() && value < valueList.get(1).longValue();
    }

    /**
     * 判断BA模式
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean ba(String controlId, Number... values) {
        List<Number> valueList = Arrays.asList(values);
        long value = Long.parseLong(controlId);
        return value > valueList.get(0).longValue() && value <= valueList.get(1).longValue();
    }

    /**
     * 判断ABA模式
     *
     * @param controlId 控制id
     * @param values    需要检测的值
     * @return 返回结果
     */
    public static Boolean aba(String controlId, Number... values) {
        List<Number> valueList = Arrays.asList(values);
        long value = Long.parseLong(controlId);
        return value >= valueList.get(0).longValue() && value <= valueList.get(1).longValue();
    }


}
