using System.IO;
using UnityEditor.ProjectWindowCallback;
using UnityEngine;
using UnityEngine.Rendering;

namespace UnityEditor.ShaderGraph
{
    class CreateShaderSubGraph : AssetCreationEndAction
    {
        [MenuItem("Assets/Create/Shader Graph/Sub Graph", priority = CoreUtils.Sections.section1 + CoreUtils.Priorities.assetsCreateShaderMenuPriority + 1)]
        public static void CreateMaterialSubGraph()
        {
            ProjectWindowUtil.StartNameEditingIfProjectWindowExists(EntityId.None, CreateInstance<CreateShaderSubGraph>(),
                string.Format("New Shader Sub Graph.{0}", ShaderSubGraphImporter.Extension), ShaderSubGraphImporter.GetIcon(), null);
        }

        public override void Action(EntityId entityId, string pathName, string resourceFile)
        {
            var graph = new GraphData { isSubGraph = true };
            var outputNode = new SubGraphOutputNode();
            graph.AddNode(outputNode);
            graph.outputNode = outputNode;
            outputNode.AddSlot(ConcreteSlotValueType.Vector4);
            graph.path = "Sub Graphs";
            FileUtilities.WriteShaderGraphToDisk(pathName, graph);
            AssetDatabase.Refresh();

            if (ShaderGraphPreferences.GetOrPromptOpenNewGraphOnCreation())
            {
                var obj = AssetDatabase.LoadAssetAtPath<SubGraphAsset>(pathName);
                AssetDatabase.OpenAsset(obj);
            }
        }
    }
}