﻿using JLGames.RocketDriver.Actions.Utils;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.Layer
{
    [RequireComponent(typeof(LayerManager))]
    public class CanvasLayerManager : MonoBehaviour
    {
        private LayerManager m_Manager;

        public LayerManager Manager
        {
            get
            {
                if (null == m_Manager)
                    m_Manager = GetComponent<LayerManager>();
                return m_Manager;
            }
        }

        public Transform LayerBackGround => Manager.GetLayer(LayerNames.LayerBackGround, true);
        public Transform LayerSceneView => Manager.GetLayer(LayerNames.LayerSceneView, true);
        public Transform LayerMessageCenter => Manager.GetLayer(LayerNames.LayerMsgCenter, true);
        public Transform LayerUI => Manager.GetLayer(LayerNames.LayerUI, true);
        public Transform LayerWindow => Manager.GetLayer(LayerNames.LayerWindow, true);
        public Transform LayerMessageTop => Manager.GetLayer(LayerNames.LayerMsgTop, true);
        public Transform LayerTips => Manager.GetLayer(LayerNames.LayerTips, true);
        public Transform LayerTop => Manager.GetLayer(LayerNames.LayerTop, true);

        public void AddChildToBackGround(Transform child)
        {
            AddChildToLayer(child, LayerBackGround);
        }

        public void AddChildToSceneView(Transform child)
        {
            AddChildToLayer(child, LayerSceneView);
        }

        public void AddChildToMessageCenter(Transform child)
        {
            AddChildToLayer(child, LayerMessageCenter);
        }

        public void AddChildToUI(Transform child)
        {
            AddChildToLayer(child, LayerUI);
        }

        public void AddChildToWindow(Transform child)
        {
            AddChildToLayer(child, LayerWindow);
        }

        public void AddChildToMessageTop(Transform child)
        {
            AddChildToLayer(child, LayerMessageTop);
        }

        public void AddChildToTips(Transform child)
        {
            AddChildToLayer(child, LayerTips);
        }

        public void AddChildToTop(Transform child)
        {
            AddChildToLayer(child, LayerTop);
        }

        public void AddChildToLayer(Transform child, Transform layer)
        {
            if (null == child || null == layer) return;
            TransformUtil.AddChildTo(child, layer);
        }

        public void AddChildToLayer(Transform child, string layerName)
        {
            if (string.IsNullOrEmpty(layerName) || null == child) return;

            var layer = Manager.GetLayer(layerName, true);

            if (null == layer) return;

            TransformUtil.AddChildTo(child, layer);
        }

        private void Awake()
        {
            Manager.InitLayers();
        }
    }
}