using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;

namespace Unity.VisualScripting
{
    public abstract class GraphContextExtension<TGraphContext> : IGraphContextExtension
        where TGraphContext : IGraphContext
    {
        protected GraphContextExtension(TGraphContext context)
        {
            this.context = context;
        }

        public TGraphContext context { get; }

        #region Context Shortcuts

        protected GraphReference reference => context.reference;

        protected IGraph graph => context.graph;

        protected ICanvas canvas => context.canvas;

        protected GraphSelection selection => context.selection;

        #endregion

        public virtual IEnumerable<GraphContextMenuItem> contextMenuItems => Enumerable.Empty<GraphContextMenuItem>();

        public virtual DragAndDropVisualMode dragAndDropVisualMode => DragAndDropVisualMode.Generic;

        public virtual bool AcceptsDragAndDrop() => false;

        public virtual void PerformDragAndDrop() { }

        public virtual void UpdateDragAndDrop() { }

        public virtual void DrawDragAndDropPreview() { }

        public virtual void ExitDragAndDrop() { }

        protected static Event e => Event.current;
    }
}