using System;
using System.Reflection;
using UnityEngine;

public static class ProcessExecutor
{
    public static void ExecuteProcessAddMethods(string selectedProcessName)
    {
        // 获取当前项目中的所有程序集
        var assemblies = AppDomain.CurrentDomain.GetAssemblies();

        foreach (var assembly in assemblies)
        {
            // 查找每个程序集中的所有类型
            Type[] types = assembly.GetTypes();

            
            foreach (var type in types)
            {
                // // 判断类名是否包含当前选择的流程名称
                if (type.Name.Contains(selectedProcessName))
                {
                    // 查找类中所有标记了 ProcessAction 属性的方法
                    var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

                    foreach (var method in methods)
                    {
                        // 检查方法是否有 ProcessAction 属性
                        if (method.GetCustomAttribute<ProcessActionAttribute>() != null)
                        {
                            // 如果是实例方法，先创建实例再调用
                            if (!method.IsStatic)
                            {
                                var instance = Activator.CreateInstance(type);
                                method.Invoke(instance, null);
                                Debug.Log($"执行实例方法: {method.Name} 在 {type.FullName}");
                            }
                            else
                            {
                                // 如果是静态方法，直接调用
                                method.Invoke(null, null);
                                Debug.Log($"执行静态方法: {method.Name} 在 {type.FullName}");
                            }
                        }
                    }
               }
            }
        }
    }
}