using UnityEngine;
using System.Collections;
using Thousandto.Code.Center;
using Thousandto.Plugins.Common;
using Thousandto.Code.Logic;
using System.Collections.Generic;
using Thousandto.Core.Asset;
using System;
using Thousandto.Core.Base;

namespace Thousandto.GameUI.Form
{
    //UI闪光控件,一条白光在某个UI上的移动效果
    public class UIBlinkCompoent: MonoBehaviour
    {
        #region//私有变量
        //根节点
        private UIPanel _rootPanel = null;
        //移动的对象
        private UIWidget _widget = null;
        private Transform _moveTrans = null;
        private GameObject _moveGo = null;
        //移动开始位置
        private Vector2 _startPos = Vector2.zero;
        //移动结束位置
        private Vector2 _endPos = Vector2.zero;
        //移动方向
        private UIBlinkMoveDir _moveDir = UIBlinkMoveDir.LeftToRight;

        //时间计数器
        private float _moveTimer = 0f;
        //单次移动时间
        private float _maxMoveTime = 1f;
        //每次移动间隔时间
        private float _intervalTime = 0f;
        //是否正在移动
        private bool _isMoveing = true;
        #endregion

        #region//属性
        public UIBlinkMoveDir MoveDir
        {
            get
            {
                return _moveDir;
            }
            set
            {
                if(_moveDir != value)
                {
                    _moveDir = value;
                    _isMoveing = false;
                    Play();
                }
            }
        }
        public float MoveTime
        {
            get
            {
                return _maxMoveTime;
            }
            set
            {
                _maxMoveTime = value;
            }
        }
        public float IntervalTime
        {
            get
            {
                return _intervalTime;
            }
            set
            {
                _intervalTime = value;
            }
        }

        //根节点
        public UIPanel RootPanel
        {
            get
            {
                return _rootPanel;
            }
        }
        #endregion

        #region//共有函数
        public void Play()
        {
            FindRes();

            _moveTimer = 0f;

            var region = _rootPanel.finalClipRegion;
            var left = region.x - (region.z / 2) - (_widget.width / 2);
            var right = region.x + (region.z / 2) + (_widget.width / 2);
            var top = region.y + (region.w / 2) + (_widget.height / 2);
            var bottom = region.y - (region.w / 2) - (_widget.height / 2);

            switch(_moveDir)
            {
                case UIBlinkMoveDir.LeftToRight:
                    {
                        _startPos = new Vector2(left, region.y);
                        _endPos = new Vector2(right, region.y);
                    }
                    break;
                case UIBlinkMoveDir.RightRoLeft:
                    {
                        _startPos = new Vector2(right, region.y);
                        _endPos = new Vector2(left, region.y);
                    }
                    break;
                case UIBlinkMoveDir.TopToBottom:
                    {
                        _startPos = new Vector2(region.x, top);
                        _endPos = new Vector2(region.x, bottom);
                    }
                    break;
                case UIBlinkMoveDir.BottomToTop:
                    {
                        _startPos = new Vector2(region.x, bottom);
                        _endPos = new Vector2(region.x, top);
                    }
                    break;
            }

            _isMoveing = true;
            _moveGo.SetActive(true);
        }

        public void Stop()
        {
            FindRes();
            _isMoveing = false;
            _moveGo.SetActive(false);
        }

        public void SetSize(int width, int height)
        {
            if(_rootPanel != null)
            {
                var region = new Vector4(_rootPanel.baseClipRegion.x, _rootPanel.baseClipRegion.y, width, height);
                _rootPanel.baseClipRegion = region;
                Play();
            }
        }
        #endregion

        #region//私有函数
        private void Awake()
        {
            FindRes();
            if(_isMoveing)
            {
                _isMoveing = false;
                Play();
            }
        }
        private void FindRes()
        {
            if(_rootPanel == null)
            {
                _rootPanel = GetComponent<UIPanel>();
            }
            if(_widget == null)
            {
                _widget = transform.Find("MoveRoot").GetComponent<UIWidget>();
                _moveTrans = _widget.transform;
                _moveGo = _widget.gameObject;
            }
        }

        private void Update()
        {
            if(_isMoveing)
            {
                _moveTimer += Time.deltaTime;

                var curTime = _moveTimer % (_maxMoveTime + _intervalTime);
                if(curTime <= _maxMoveTime)
                {
                    _moveGo.SetActive(true);
                    var lerpValue = curTime / _maxMoveTime;
                    _moveTrans.localPosition = Vector2.Lerp(_startPos, _endPos, lerpValue);
                }
                else
                {
                    _moveGo.SetActive(false);
                }
            }
        }
        #endregion
    }
}