using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Random = UnityEngine.Random;

namespace MPStudio
{
    [DisallowMultipleComponent]
    [DefaultExecutionOrder(-1)]
    public class GuideManager : MonoBehaviour
    {
        public static GuideManager Inst { get; private set; }
        
        [SerializeField] private Texture2D defaultCursor;
        [SerializeField] private Texture2D clickCursor;
        [SerializeField] private Vector2 hotSpot = Vector2.zero;

        protected virtual  void Awake()
        {
            if (Inst == null)
            {
                Inst = this;
            }
            else if (Inst != this)
            {
                Destroy(gameObject);
            }
        }
        
        protected virtual void Start()
        {
            //Cursor.SetCursor(defaultCursor, hotSpot, CursorMode.Auto);
        }

       protected virtual void ClickEffect()
       {
           float scale = Random.Range(2f, 4f);
           
            Vector3 v = Input.mousePosition;
            v.z = -Camera.main.transform.position.z;
            var pos= Camera.main.ScreenToWorldPoint(v);

            object[] data = new object[] { scale };
            var go = PoolManager.Inst.SpawnGo("PoolObj/白环2",data);
            go.transform.localPosition =new Vector3(pos.x,pos.y,0);
        }

       protected virtual void AddTextTest()
       {
           float scale = Random.Range(200f, 400f);
           

           object[] data = new object[] { scale.ToString() };
           var go = PoolManager.Inst.SpawnGo("PoolObj/AddText",data);
           go.transform.SetParent(GameObject.Find("Canvas/Panel").transform,false);
           go.transform.localPosition = new Vector3(194,66,0);
       }

       public void GrayAllSprite(GameObject go,bool isGray=true)
       {
           SpriteRenderer[] allSps =go.GetComponentsInChildren<SpriteRenderer>(true);

           Material loadedMat = ResManager.Inst.LoadMaterial("Custom_BlackAndWhite");

           foreach (SpriteRenderer spr in allSps)
           {
               Material instanceMat = null; //避免共享材质ai说的
               if (isGray)
               {
                   instanceMat = new Material(loadedMat);
                   spr.material = instanceMat;
               }
               else
               {
                   Shader defaultSpriteShader = Shader.Find("Sprites/Default");
                   if (defaultSpriteShader != null)
                   {
                       Material defaultMaterial = new Material(defaultSpriteShader);
                       spr.sharedMaterial = defaultMaterial;
                   }
               }
           }
       }
       
       public void GrayAllImage(GameObject go,bool isGray=true)
       {
           Image[] allSps =go.GetComponentsInChildren<Image>(true);

           Material loadedMat = ResManager.Inst.LoadMaterial("Custom_BlackAndWhite");

           foreach (Image spr in allSps)
           {
               Material instanceMat = null; //避免共享材质ai说的
               if (isGray)
               {
                   instanceMat = new Material(loadedMat);
                   spr.material = instanceMat;
               }
               else
               {
                   spr.material = null;
                   /*
                   Shader defaultSpriteShader = Shader.Find("Sprites/Default");
                   if (defaultSpriteShader != null)
                   {
                       Material defaultMaterial = new Material(defaultSpriteShader);
                       spr.sharedMaterial = defaultMaterial;
                   }
                   */
               }
           }
       }



       public bool isGray = true;
        private void Update()
        {
            
            if (Input.GetMouseButtonDown(0))
            {
                // GrayAllSprite(GameObject.Find("logo2"),isGray);
               
                //GrayAllImage(GameObject.Find("Canvas/Panel/Image"),isGray); isGray = !isGray;
               
                //ClickEffect();
                
                AddTextTest();
            }
        }
    }
}