using System.Reflection;
using UnityEditor;
using UnityEngine;

namespace NaughtyAttributes.Editor {
    [MethodDrawer(typeof(ButtonAttribute))]
    public class ButtonMethodDrawer : MethodDrawer {
        public override void DrawMethod (UnityEngine.Object target, MethodInfo methodInfo) {
            if (methodInfo.GetParameters().Length == 0) {
                ButtonAttribute buttonAttribute = (ButtonAttribute)methodInfo.GetCustomAttributes(typeof(ButtonAttribute), true)[0];
                string buttonText = string.IsNullOrEmpty(buttonAttribute.Text) ? methodInfo.Name : buttonAttribute.Text;

                if (GUILayout.Button(buttonText)) {
                    methodInfo.Invoke(target, null);
                }
            } else {
                string warning = typeof(ButtonAttribute).Name + " works only on methods with no parameters";
                EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, context: target);
            }
        }
    }
}
