using UnityEditorWindow = UnityEditor.EditorWindow;

namespace Unity.PlasticSCM.Editor.UnityInternals.UnityEditor
{
    class HostView
    {
        internal object InternalObject { get; }
        internal UnityEditorWindow m_ActualView => GetActualViewInternal(this);
        internal ContainerWindow window => GetWindow(this);

        internal HostView(object hostView)
        {
            InternalObject = hostView;
        }

        internal delegate UnityEditorWindow GetActualViewDelegate(HostView hostView);
        internal static GetActualViewDelegate GetActualViewInternal { get; set; }

        internal delegate ContainerWindow GetWindowDelegate(HostView hostView);
        internal static GetWindowDelegate GetWindow { get; set; }
    }

    internal class DockArea : HostView
    {
        internal DockArea(object hostView) : base(hostView) { }

        internal void AddTab(UnityEditorWindow pane, bool sendPaneEvents = true)
        {
            AddTabInternal(this, pane, sendPaneEvents);
        }

        internal delegate void AddTabDelegate(DockArea dockArea, UnityEditorWindow pane, bool sendPaneEvents = true);
        internal static AddTabDelegate AddTabInternal { get; set; }
    }
}