#!/usr/bin/env python
# -*- coding: utf-8 -*-
##################################################################
#
# Copyright (c) 2023 CICV, Inc. All Rights Reserved
#
##################################################################
"""
@Authors:           yangzihao(yangzihao@china-icv.cn)
@Data:              2024/01/30
@Last Modified:     2024/01/30
@Summary:           Evaluateion functions
"""

import os
import importlib.util
from collections import defaultdict
import traceback


# from process.data_process import DataProcess
# from process.config_parser import ConfigParse


def custom_run(folder_path, all_data, metric_list, case_name):
    # 初始化一个字典来存储结果
    results = defaultdict(dict)
    # metric_list = all_data.config.metric_list
    # metric_list = ['ldw_miss_warning_count', 'ldw_miss_warning_count2', 'ldw_miss_warning_count3']

    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        try:
            if filename.endswith('.py') and not filename.startswith('__') and filename[
                                                                              :-3] in metric_list:  # 过滤掉非Python文件或特殊文件
                # 构造模块的完整路径
                module_path = os.path.join(folder_path, filename)

                # 使用importlib来动态导入模块
                spec = importlib.util.spec_from_file_location(filename[:-3], module_path)
                module = importlib.util.module_from_spec(spec)
                spec.loader.exec_module(module)

                # 假设每个模块都有一个CustomMetric类
                if hasattr(module, 'CustomMetric'):
                    CustomMetric = getattr(module, 'CustomMetric')

                    # 实例化CustomMetric类
                    metric_instance = CustomMetric(all_data, case_name)
                    metric_result = metric_instance.result

                    # 将结果存储到字典中,key为文件名,value为各个方法的结果
                    results[filename[:-3]] = metric_result

        except Exception as e:
            traceback.print_exc()
            continue

    return results

# if __name__ == '__main__':
#     # 文件夹路径,自定义指标Python文件都在此文件夹下
#     folder_path = '../custom'
#     path = r"..\task_1228\case1228\data"
#     configPath = r"../configs/config.json"
#     config = ConfigParse(configPath)
#     all_data = DataProcess(path, config)
#
#     custom_run(folder_path, all_data)