using System.Collections.Generic;
using UnityEditor.Graphing;
using UnityEditor.Rendering.Fullscreen.ShaderGraph;
using UnityEditor.ShaderGraph.Internal;

namespace UnityEditor.ShaderGraph
{
    [Title("Input", "UGUI", "Toggle State")]
    class ToggleStateNode : AbstractMaterialNode, IGeneratesBodyCode
    {
        public ToggleStateNode()
        {
            name = "Toggle State";
            UpdateNodeAfterDeserialization();
        }

        //public override string documentationURL => NodeUtils.GetDocumentationString("ToggleStateNode");

        public override bool hasPreview => false;

        public sealed override void UpdateNodeAfterDeserialization()
        {
            var slots = new List<int>();
            MaterialSlot slot = new BooleanMaterialSlot(0, "State", "_isOn", SlotType.Output, false);
            AddSlot(slot);
            slots.Add(0);
            RemoveSlotsNameNotMatching(slots, true);
        }

        public override void CollectShaderProperties(PropertyCollector properties, GenerationMode generationMode)
        {
            properties.AddBoolProperty("_isOn", false, HLSLDeclaration.UnityPerMaterial);
        }

        public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode)
        {
            sb.AppendLine($"$precision {GetVariableNameForSlot(0)} = _isOn;");
        }
    }
}