using System.Reflection;

namespace UnityEditor.ShaderGraph
{
    [Title("Utility", "UGUI", "Selectable State Switch")]
    class SelectableBranchNode : CodeFunctionNode
    {
        public SelectableBranchNode()
        {
            name = "Selectable State Switch";
            synonyms = new string[] { "switch", "ui", "selectable" };
        }

        protected override MethodInfo GetFunctionToConvert()
        {
            return GetType().GetMethod("Unity_Switch", BindingFlags.Static | BindingFlags.NonPublic);
        }

        static string Unity_Switch(
            [Slot(0, Binding.None)] Vector1 State,
            [Slot(1, Binding.None, 1, 1, 1, 1)] DynamicDimensionVector Normal,
            [Slot(2, Binding.None, 0, 0, 0, 0)] DynamicDimensionVector Highlighted,
            [Slot(3, Binding.None, 0, 0, 0, 0)] DynamicDimensionVector Pressed,
            [Slot(4, Binding.None, 0, 0, 0, 0)] DynamicDimensionVector Selected,
            [Slot(5, Binding.None, 0, 0, 0, 0)] DynamicDimensionVector Disabled,
            [Slot(6, Binding.None)] out DynamicDimensionVector Out)
        {
            return
@"
{
    [branch] switch(State)
    {
        case 0:
            Out = Normal; 
            break;
        case 1:
            Out = Highlighted; 
           break;
        case 2:
            Out = Pressed; 
           break;
        case 3:
            Out = Selected; 
           break;
        case 4:
            Out = Disabled; 
           break;
        default:
            Out = Normal; 
           break;
    }
}
";
        }
    }
}