#if VISUAL_SCRIPT_INTERNAL
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;

public class FlowGraphUnitUISample : RuntimeFlowGraph
{
    [MenuItem("Tools/Visual Scripting/Internal/Create Unit UI Samples", priority = LudiqProduct.DeveloperToolsMenuPriority + 403)]

    public static void CreateUnitUISamples()
    {
        (new FlowGraphUnitUISample()).CreateGraphUISample();
    }

    private void CreateGraphUISample()
    {
        CreateGraph();

        IEnumerable<Type> GetEventUnitTypes() => AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => typeof(IUnit).IsAssignableFrom(t))).Where(t => t.IsClass && !t.IsAbstract);

        Vector2 position = Vector2.zero;

        int index = 0;

        foreach (var unitType in GetEventUnitTypes())
        {
            string name = unitType.Assembly.GetName().Name;
            string space = unitType.FullName;

            var unit = Activator.CreateInstance(name, space);

            Debug.Log(unit);

            IUnit b = (IUnit)unit.Unwrap();

            b.position = position;

            if (index % 10 == 0)
            {
                position.x = 0;
                position.y += 180;
            }

            position.x += 180;

            AddUnit(b, position);

            index++;
        }
    }
}
#endif