using System.Collections.Generic;
using UnityEngine;

namespace COM3D2.MeidoPhotoStudio.Plugin
{
    internal abstract class BaseWindow : BaseWindowPane
    {
        private static int id = 765;
        private static int ID => id++;
        public readonly int windowID;
        protected Rect windowRect = new Rect(0f, 0f, 480f, 270f);
        public virtual Rect WindowRect
        {
            get => windowRect;
            set
            {
                value.x = Mathf.Clamp(
                    value.x, -value.width + Utility.GetPix(20), Screen.width - Utility.GetPix(20)
                );
                value.y = Mathf.Clamp(
                    value.y, -value.height + Utility.GetPix(20), Screen.height - Utility.GetPix(20)
                );
                windowRect = value;
            }
        }
        protected Vector2 MiddlePosition => new Vector2(
            Screen.width / 2 - windowRect.width / 2,
            Screen.height / 2 - windowRect.height / 2
        );

        public BaseWindow ModalWindow { get; private set; }

        public BaseWindow() : base() => windowID = ID;

        public virtual void HandleZoom()
        {
            if (Input.mouseScrollDelta.y != 0f)
            {
                if (Visible)
                {
                    Vector2 mousePos = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
                    if (WindowRect.Contains(mousePos)) Input.ResetInputAxes();
                }
            }
        }

        public virtual void Update() => HandleZoom();

        public virtual void Activate() { }

        public virtual void Deactivate() { }

        public virtual void GUIFunc(int id)
        {
            Draw();
            GUI.DragWindow();
        }
    }
}