/*           INFINITY CODE          */
/*     https://infinity-code.com    */

using UnityEditor;
using UnityEngine;

namespace InfinityCode.TreeTools.Editors
{
    internal class MeshTargetToolbar : Toolbar
    {
        private static bool inited;
        private static GUIContent injectContent;

        public static void Draw(SceneView view, Vector3 position)
        {
            if (!inited) Init();

            Vector3 viewport = view.camera.WorldToViewportPoint(position);
            if (!Utils.Is01(viewport.x) || !Utils.Is01(viewport.y)) return;
            if (viewport.z < 0) return;

            Handles.BeginGUI();
            float pixelPerPoint = EditorGUIUtility.pixelsPerPoint;
            Vector3 screenPoint = view.camera.WorldToScreenPoint(position) / pixelPerPoint;

            Vector2 size = GetSize();

            if (screenPoint.y > size.y + 150 / pixelPerPoint)
            {
                screenPoint.y -= size.y + 50 / pixelPerPoint;
            }
            else
            {
                screenPoint.y += size.y + 150 / pixelPerPoint;
            }

            screenPoint.x -= size.x / 2;

            screenPoint.y = view.position.height - screenPoint.y;

            Rect rect = new Rect(screenPoint, size);
            if (rect.xMin < 5) rect.x = 5;
            else if (rect.xMax > view.position.width - 5) rect.x = view.position.width - rect.width - 5;

            GUILayout.BeginArea(rect);

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button(injectContent, EditorStyles.toolbarButton, GUILayout.Width(BUTTON_WIDTH)))
            {
                EditorApplication.delayCall += () =>
                {
                    MenuItems.InjectSelectedTrees();
                    TreeTool.meshTargets = new GameObject[0];
                };
            }

            DrawHelpSettings();

            EditorGUILayout.EndHorizontal();

            GUILayout.EndArea();

            Handles.EndGUI();
        }

        public static Vector2 GetSize()
        {
            int countButtons = 3;
            if (Updater.hasNewVersion) countButtons++;
            return new Vector2(countButtons * BUTTON_WIDTH, 24);
        }

        private static void Init()
        {
            inited = true;

            InitGeneral();

            injectContent = new GUIContent(Icons.inject, "Inject");
        }
    }
}