using UnityEngine;

namespace Unity.VisualScripting
{
    public abstract class SinglePageWindow<TPage> : EditorWindowWrapper where TPage : Page
    {
        protected SinglePageWindow() { }

        private TPage _page;

        public TPage page
        {
            get
            {
                if (_page == null)
                {
                    _page = CreatePage();

                    if (_page == null)
                    {
                        throw new InvalidImplementationException();
                    }

                    _page.onComplete = Close;
                }

                return _page;
            }
        }

        protected abstract TPage CreatePage();

        protected override void ConfigureWindow()
        {
            window.titleContent = new GUIContent(page.title, page.icon?[IconSize.Small]);
        }

        public override void OnShow()
        {
            page.Show();
        }

        public override void Update()
        {
            if (page.CompleteSwitch())
            {
                return;
            }

            page.Update();
        }

        public override void OnClose()
        {
            page.Close();
        }

        public override void OnFocus()
        {
            page.OnFocus();
        }

        public override void OnLostFocus()
        {
            page.OnLostFocus();
        }

        public override void OnGUI()
        {
            LudiqGUI.BeginVertical();
            page.DrawHeader();
            // GUILayout.Box(GUIContent.none, LudiqStyles.horizontalSeparator);
            GUILayout.BeginHorizontal(GUILayout.ExpandHeight(true));
            page.DrawContent();
            LudiqGUI.EndHorizontal();
            LudiqGUI.EndVertical();
        }
    }
}