package org.eco.als.utils;


import org.apache.commons.math3.stat.StatUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

/**
 * @description StatisticsCalculator
 *
 * @author GaoKunW
 * @date 2025/3/14 10:37
 */
public class StatisticsCalculator {
    // 定义公式名称与对应方法的映射
    public static final Map<String, Function<double[], Object>> STATISTICS_MAP = new HashMap<>();
    static {
        // 算数平均数
        STATISTICS_MAP.put("mean", StatUtils::mean);
        // 方差
        STATISTICS_MAP.put("variance", StatUtils::variance);
        // 总体方差
        STATISTICS_MAP.put("populationVariance", StatUtils::populationVariance);
        // 和
        STATISTICS_MAP.put("sum", StatUtils::sum);
        // 最大值
        STATISTICS_MAP.put("max", StatUtils::max);
        // 最小值
        STATISTICS_MAP.put("min", StatUtils::min);
        // 众数
        STATISTICS_MAP.put("mode", StatUtils::mode);
        // 标准化
//        STATISTICS_MAP.put("normalize", StatUtils::normalize);
        // 几何平均数
        STATISTICS_MAP.put("geometricMean", StatUtils::geometricMean);
        // 对数求和
//        STATISTICS_MAP.put("sumLog", StatUtils::sumLog);
        // 平方和
        STATISTICS_MAP.put("sumSq", StatUtils::sumSq);
        // 可以继续添加其他公式
    }
//    public static Object


    /**
     * 根据公式名称计算统计指标
     *
     * @param formula 公式名称（如 "mean", "variance", "populationVariance" 等）
     * @param values  数据集
     * @return 计算结果
     */
    public static Object calculateStatistic(String formula, double[] values) {
        Function<double[], Object> function = STATISTICS_MAP.get(formula);
        if (function == null) {
            throw new IllegalArgumentException("Unsupported formula: " + formula);
        }
        return function.apply(values);
    }
}
