using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using D2D;
using D2D.Databases;
using D2D.Gameplay;
using D2D.Tools;
using D2D.Utilities;
using D2D.Utils;
using D2DD;
using NUnit.Framework;
using UnityEditor;
using static D2D.Utilities.SettingsFacade;
using static D2D.Utilities.CommonLazyFacade;
using static D2D.Utilities.CommonGameplayFacade;
//using UnityToolbarExtender;

namespace D2D
{
    [InitializeOnLoad]
    public class UnityTopbar : SuperUnityTopbar
    {
        private static Transform _selectedTransform;
        
        static UnityTopbar()
        {
    //        ToolbarExtender.LeftToolbarGUI.Add(Left);
  //          ToolbarExtender.RightToolbarGUI.Add(Right);
        }

        private static void Left()
        {
            if (!_coreData.tools.showLeftTopBar)
                return;
            
            // if (SmallButton("Col", "Collapse folders in project"))
            //     EditorCollapseAll.CollapseFolders();
            
            if (LetterButton("+F", "New folder"))
                CallMenuItem("Assets/Create/Folder");
            
            if (LetterButton("+M", "New material"))
                CallMenuItem("Assets/Create/Material");
            
            /*if (LetterButton("+N", "New note"))
                CallMenuItem("GameObject/StickyNotes/Create note");*/
            
            /*if (SmallButton("DB", "Clear DB"))
                Shortcuts.ClearDB();*/
            
            /*if (LetterButton("Up️", "Navigate to parent. Cmd+'"))
               Shortcuts.SelectParent();*/

               /*if (SmallButton("Fold", "Fold. Cmd+]"))
                   Shortcuts.FoldParent();*/

            if (SmallButton("Scene", "Select scene asset"))
                Shortcuts.SelectScene();
            
            /*if (SmallButton("Keep", "Keep hierarchy. Ctrl+."))
                HierarchyKeeper.Keep();*/
            
            /*if (SmallButton("Mat", "Show material usages in project. Cmd+M"))
                Shortcuts.SelectChildrenMaterial();*/

            /*if (SmallButton("Pack", "Export package"))
            {
                var a = AssetsPalette.Instance;
                if (!a.toExport.IsNullOrEmpty())
                {
                    Selection.objects = a.toExport;
                }
                CallMenuItem("Assets/Export Package...");
            }*/

            if (SmallButton("Build"))
            {
                CoreSettings.Instance.ApplyProductionData();
                CallMenuItem("File/Build Settings...");

                return;

                var pathToScenes = "Assets/Scenes/";
                var pathToStarter = "Other/Starter.unity";
                // var scenesCount = _coreData.loopRangeLevel.y;
                var scenes = new List<string>();
                scenes.Add(pathToScenes + pathToStarter);
                // for (int i = 1; i <= scenesCount; i++)
                   // scenes.Add(pathToScenes + _coreData.levelScenePrefix + i + ".unity");
                scenes.ForEach(s => Debug.Log(s));
                BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions
                {
                    scenes = scenes.ToArray(),
                    locationPathName = $"{System.IO.Directory.GetCurrentDirectory()}/Builds/{_coreData.production.appName}.apk",
                    target = BuildTarget.Android,
                    options = BuildOptions.None
                };
                BuildPipeline.BuildPlayer(buildPlayerOptions);
                // BuildSummary summary = report.summary;
                // BuildPipeline.BuildPlayer(levels, path + "/BuiltGame.exe", BuildTarget.StandaloneWindows, BuildOptions.None);
            }
            
            if (BigButton("Copy T"))
            {
                _selectedTransform = Selection.activeTransform;
            }
            
            if (BigButton("Paste T"))
            {
                Selection.activeTransform.position = _selectedTransform.position;
                Selection.activeTransform.rotation = _selectedTransform.rotation;
                Selection.activeTransform.localScale = _selectedTransform.localScale;
            }
        }

        private static void Right()
        {
            GUILayout.FlexibleSpace();

            if (_coreData.tools.showMiddleTopBar)
            {
                /*if (LetterButton("P", "Select player"))
                    Shortcuts.SelectPlayer();
            
                if (LetterButton("L", "Select level"))
                    Shortcuts.SelectLevel();
            
                if (LetterButton("C", "Select canvas"))
                    Shortcuts.SelectCanvas();*/
                
                if (TinyButton("1", "Select all objects with tag 1 script"))
                    Shortcuts.SelectTag1();
            
                if (TinyButton("2", "Select all objects with tag 2 script"))
                    Shortcuts.SelectTag2();
            
                if (TinyButton("3", "Select all objects with tag 3 script"))
                    Shortcuts.SelectTag3();
                
                if (TinyButton("4", "Select all objects with tag 4 script"))
                    Shortcuts.SelectTag4();
                
                GUILayout.Space(15);
            }


            if (_coreData.tools.showRightTopBar)
            {
                /*if (SmallButton("Mesh", "Show mesh usages in project. Cmd+L"))
                    Shortcuts.SelectChildrenMesh();*/

                // GUILayout.Space(10);
                
                if (LetterButton("C", "Core settings. Cmd+I", Color.blue))
                    Shortcuts.SelectCoreSettings();

                if (LetterButton("G", "Game settings. Cmd+O", Color.blue))
                    Shortcuts.SelectGameSettings();

                if (ButtonTexture(_coreData.tools.icons.effects, 20))
                {
                    HierarchyKeeper.Keep();
                    AssetsPaletteWindow.Init();
                }
            }
        }
        
        private static void CallMenuItem(string t) =>
            EditorApplication.ExecuteMenuItem(t);
    }
}