using System;
using HarmonyLib;

namespace KFCommonUtilityLib.Scripts.Attributes
{
    public interface IMethodTarget
    {

    }

    [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
    public sealed class MethodTargetPrefixAttribute : Attribute, IMethodTarget
    {
        public MethodTargetPrefixAttribute()
        {

        }
    }

    [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
    public sealed class MethodTargetPostfixAttribute : Attribute, IMethodTarget
    {
        public MethodTargetPostfixAttribute()
        {

        }
    }

    [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
    public sealed class MethodTargetTranspilerAttribute : Attribute, IMethodTarget
    {
        public MethodTargetTranspilerAttribute()
        {

        }
    }

    public static class IMethodTargetExtension
    {
        public static string GetTargetMethodIdentifier(this HarmonyMethod self)
        {
            return (self.methodName ?? "this[]") + (self.argumentTypes == null ? string.Empty : string.Join(",", Array.ConvertAll(self.argumentTypes, type => type.FullDescription())));
        }
    }
}
