using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityGameFramework.Runtime;
using GameFramework;
using GameFramework.DataTable;
using GameFramework.Sound;
using GameFramework.Download;
using GameFramework.FileSystem;
using GameFramework.ObjectPool;
using GameFramework.Resource;
using System;
using DG.Tweening;
namespace MetaClient
{

    public class UICustom : UGuiForm
    {
        // Start is called before the first frame update
        [Header("初始界面")]
        public GameObject toolView;

        [Header("基础按钮界面")]
        public GameObject baseView;
        [Header("保存按钮")]
        public GameObject saveBtn;

        [Header("捏脸界面")]
        public GameObject nieLianView;


        [Header("身体界面")]
        public GameObject bodyView;

        [Header("自定义")]
        public GameObject ziDingYiBtn;
        [Header("衣服界面")]
        public GameObject clothView;

        [Header("左边界面")]
        public GameObject leftView;

        [Header("右边界面")]
        public GameObject rightView;

        //[Header("点击后生成的按钮列表")]
        //public GameObject buttonList;
        [Header("白底背景")]
        public GameObject whitebg;
        [Header("按钮预制体")]
        public GameObject buttonItem;

        [Header("滑块")]
        public Scrollbar scrollbar;

       // [Header("顺序")]
        private EButtonShunXu eButtonShunXu = EButtonShunXu.None;
        
        [Header("颜色演示预制体")]
        public GameObject colItem;


        public float tween_leftMax = 0;
        public float tween_leftMin = -250;

        public float tween_rightMin = 0;
        public float tween_rightMax = 223;

        private float tween_saveBtnMax = 119;
        private float tween_saveBtnMin = -108;

       
        //private float tweenTime = 10;
        //private float tweenLeastTime = 0;

        public bool isTween = false;
        [Header("选择界面分支")]
        [SerializeField]
        private ECustomStyple eCustomStyple = ECustomStyple.None;
        [Header("历史记录用于回退")]
        [SerializeField]
        private List<string> histroy;
       
        private int part = 0;




        //[Header("接受到的数据")]
        //[SerializeField]
        private IDataTable<DRCustomBody> _bodydata;
        protected override void OnOpen(object userData)
        {

            base.OnOpen(userData);
            IDataTable<DRCustomBody> _data = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            _bodydata = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            
        }
        protected override void OnClose(bool isShutdown, object userData)
        {
            base.OnClose(isShutdown, userData);
        }


        public void ClickBotton(ECustomStyple eCustomStyple,int id,bool ziDingYi)
        {
            if (isTween)
            {
                return;
            }
            isTween = true;
            leftView.transform.DOLocalMoveX(tween_leftMin, 2f).SetEase(Ease.InOutBack).OnComplete(()=> {
                //whitebg.SetActive(bg);
               
                 ClickBtnFun(eCustomStyple,id,ziDingYi);
                leftView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
                    isTween = false;
                    Debug.Log("222");
                });
            });
            Debug.Log("333");
            rightView.transform.DOLocalMoveX(tween_rightMax, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
                rightView.transform.DOLocalMoveX(0, 2f).SetEase(Ease.InOutBack).OnComplete(() => {
                });
            });

        }



        /// <summary>
        /// 滑块改变
        /// </summary>
        public void ScrollValueChange()
        {
            Debug.Log(scrollbar.value);
        }

        /// <summary>
        /// 修改滑块
        /// </summary>

        public void SetValue(int _part,ECustomStyple eCustomStyple)
        {

            //scrollbar.value = _value;
            part = _part;
        }
        /// <summary>
        /// 获得滑块值
        /// </summary>
        public float GetValue()
        {
            return scrollbar.value;
        }

        /// <summary>
        /// 按钮点击事件
        /// </summary>
        public void ClickBtnFun(ECustomStyple eCustomStyple,int id,bool zidingyi) {
            //if (isTween)
            //{
            //    return;
            //}
            whitebg.SetActive(true);
 


         
            //ECustomStyple _eCustomStyple = (ECustomStyple)int.Parse(_objects[0].ToString());
            switch (eCustomStyple)
            {
                case ECustomStyple.None:
                    break;
                case ECustomStyple.NieLian:
                    GameObject _nieLianList = nieLianView.transform.GetChild(0).gameObject;
                    _nieLianList.SetActive(false);
                    GameObject _nieLianXX = nieLianView.transform.GetChild(2).gameObject;
                    _nieLianXX.SetActive(true);
                    //if (!zidingyi)
                    //{
                    //    ZiDingYiNeiLian(eCustomStyple, id, _nieLianXX.transform.GetChild(0).gameObject);
                    //    return;
                    //}
                    CreateNieLianImg(id, zidingyi);
                    break;
                case ECustomStyple.Body:
                    GameObject _bodyList = bodyView.transform.GetChild(0).gameObject;
                    _bodyList.SetActive(false);
                    GameObject _bodyListXX =bodyView.transform.GetChild(2).gameObject;
                    _bodyListXX.SetActive(true);
                    //if (!zidingyi)
                    //{
                    //    ZiDingYiBody(eCustomStyple, id, _bodyListXX.transform.GetChild(0).gameObject);
                    //    return;
                    //}
                    CreateBodyImg(id, zidingyi);
                    break;
                case ECustomStyple.Cloth:
                    GameObject _clothList = clothView.transform.GetChild(0).gameObject;
                    _clothList.SetActive(false);
                    GameObject _clothListXX = clothView.transform.GetChild(2).gameObject;
                    _clothListXX.SetActive(true);
                    //if (!zidingyi)
                    //{
                    //    ZiDingYiCloth(eCustomStyple, id, _clothListXX.transform.GetChild(0).gameObject);
                    //    return;
                    //}
                    CreateClothImg(id, zidingyi);
                    break;
            }
        }
        //public Action ActionFun() {

        //    return null;
        //}

        private void RemoveAllChildren(GameObject parent)
        {
            Transform transform;
            for (int i = parent.transform.childCount; i > parent.transform.childCount; i--)
            {
                transform = parent.transform.GetChild(i);
                GameObject.Destroy(transform.gameObject);
            }
        }

        //public void ZiDingYiNeiLian(ECustomStyple eCustomStyple, int id,GameObject _objPar) {
        //    RemoveAllChildren(bodyView.transform.GetChild(2).GetChild(0).gameObject);
        //    GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
        //    _obj.transform.SetParent(_objPar.transform);
        //    UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
        //    _uICustomBtn.id = id;
        //    _uICustomBtn.eCustomStyple = eCustomStyple;
        //    _obj.SetActive(true);

        //}
        //public void ZiDingYiBody(ECustomStyple eCustomStyple, int id, GameObject _objPar)
        //{
        //    RemoveAllChildren(bodyView.transform.GetChild(2).GetChild(0).gameObject);
        //    GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
        //    _obj.transform.SetParent(_objPar.transform);
        //    UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
        //    _uICustomBtn.id = id;
        //    _uICustomBtn.eCustomStyple = eCustomStyple;
        //    _obj.SetActive(true);


        //}
        //public void ZiDingYiCloth(ECustomStyple eCustomStyple, int id, GameObject _objPar)
        //{
        //    RemoveAllChildren(bodyView.transform.GetChild(2).GetChild(0).gameObject);
        //    GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
        //    _obj.transform.SetParent(_objPar.transform);
        //    UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
        //    _uICustomBtn.id = id;
        //    _uICustomBtn.eCustomStyple = eCustomStyple;
        //    _obj.SetActive(true);


        //}


        public void CreateNieLianImg(int parentid, bool ziDingYi)
        {




            GameObject _objPar = bodyView.transform.GetChild(2).GetChild(0).gameObject;
            RemoveAllChildren(_objPar);
            //等有捏脸表时改为捏脸
            IDataTable<DRCustomBody> _data = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            _bodydata = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            int cengji = ziDingYi ? 0 : 1;
            if (ziDingYi)
            {    
                GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
                _obj.transform.SetParent(_objPar.transform);
                UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
                ChangeUICustom(_uICustomBtn, parentid, eCustomStyple);
                //_uICustomBtn.id =parentid;
                //_uICustomBtn.eCustomStyple = eCustomStyple;
                //_obj.SetActive(true);
            }

            DRCustomBody[] dRCustomBodies = _bodydata.GetAllDataRows();
            for (int i = 0; i < dRCustomBodies.Length; i++)
            {
                Debug.Log(dRCustomBodies[i].Id);
                if (dRCustomBodies[i].ParentStyple == parentid)
                {
                    CreateButtonFun(dRCustomBodies[i].Icon, dRCustomBodies[i].Part, dRCustomBodies[i].Name, _objPar, dRCustomBodies[i].Id, dRCustomBodies[i].ButtonStyple, ECustomStyple.Body);
                }
            }
        }
        public void CreateClothImg(int parentid,bool ziDingYi)
        {

            GameObject _objPar = bodyView.transform.GetChild(2).GetChild(0).gameObject;
            RemoveAllChildren(_objPar);
            //等有服装时改为服装
            IDataTable<DRCustomBody> _data = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            _bodydata = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            int cengji = ziDingYi ? 0 : 1;
            if (ziDingYi)
            {
                GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
                _obj.transform.SetParent(_objPar.transform);
                UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
                ChangeUICustom(_uICustomBtn, parentid, eCustomStyple);
                //_uICustomBtn.id = parentid;
                //_uICustomBtn.eCustomStyple = eCustomStyple;
                //_obj.SetActive(true);

            }
            DRCustomBody[] dRCustomBodies = _bodydata.GetAllDataRows();
            for (int i = 0; i < dRCustomBodies.Length; i++)
            {
                Debug.Log(dRCustomBodies[i].Id);
                if (dRCustomBodies[i].ParentStyple == parentid)
                {
                    CreateButtonFun(dRCustomBodies[i].Icon, dRCustomBodies[i].Part, dRCustomBodies[i].Name, _objPar, dRCustomBodies[i].Id, dRCustomBodies[i].ButtonStyple, ECustomStyple.Body);
                }
            }
        }



        public void ChangeUICustom(UICustomBtn uICustomBtn,int id, ECustomStyple eCustomStyple) 
        {
            uICustomBtn.id = id;
            uICustomBtn.eCustomStyple = eCustomStyple;
            uICustomBtn.gameObject.SetActive(true);
        }








        public void CreateBodyImg(int parentid,bool ziDingYi) {
            GameObject _objPar = bodyView.transform.GetChild(2).GetChild(0).gameObject;
            RemoveAllChildren(_objPar);
            IDataTable<DRCustomBody> _data = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            _bodydata = GameEntry.DataTable.GetDataTable<DRCustomBody>();
            int cengji = ziDingYi ? 0 : 1;
            if (ziDingYi)
            {
                GameObject _obj = GameObject.Instantiate(ziDingYiBtn);
                _obj.transform.SetParent(_objPar.transform);
                UICustomBtn _uICustomBtn = _obj.GetComponent<UICustomBtn>();
                ChangeUICustom(_uICustomBtn, parentid, eCustomStyple);
                //_uICustomBtn.id = parentid;
                //_uICustomBtn.eCustomStyple = eCustomStyple;
                //_obj.SetActive(true);

            }
            DRCustomBody[] dRCustomBodies = _bodydata.GetAllDataRows();
            for (int i = 0; i < dRCustomBodies.Length; i++)
            {
                Debug.Log(dRCustomBodies[i].Id);
                if (dRCustomBodies[i].ParentStyple == parentid)
                {
                    CreateButtonFun(dRCustomBodies[i].Icon, dRCustomBodies[i].Part, dRCustomBodies[i].Name, _objPar, dRCustomBodies[i].Id, dRCustomBodies[i].ButtonStyple, ECustomStyple.Body);
                }
            }
          
        } 










        //private IEnumerator Tween(Action _action) {
        //    for (int i = 0; i < 100; i++)
        //    {
        //        float _value = i / 100;
        //        float _right=Mathf.Lerp(tween_rightMax, tween_rightMin, _value);
        //        float _left= Mathf.Lerp(tween_leftMix, tween_rightMax, _value);
        //        clothView.GetComponent<RectTransform>().SetPositionX(_right);
        //        toolView.GetComponent<RectTransform>().SetPositionX(_right);
        //        bodyView.GetComponent<RectTransform>().SetPositionX(_right);
        //        nieLianView.GetComponent<RectTransform>().SetPositionX(_right);
        //        baseView.GetComponent<RectTransform>().SetPositionX(_left);
        //    }
        //    yield return null;
        //}








        protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(elapseSeconds, realElapseSeconds);
        }

        //private void CreateNieLianFun(object[] _objects) {
        //    ENieLianStyple _eNieLianStyple = (ENieLianStyple)int.Parse(_objects[1].ToString());
        //    switch (_eNieLianStyple)
        //    {
        //        case ENieLianStyple.faxing:
        //            break;
        //        case ENieLianStyple.lianxing:
        //            break;
        //        case ENieLianStyple.yankuang:
        //            break;
        //        case ENieLianStyple.tongkong:
        //            break;
        //        case ENieLianStyple.meimao:
        //            break;
        //        case ENieLianStyple.bizi:
        //            break;
        //        case ENieLianStyple.erduo:
        //            break;
        //        case ENieLianStyple.zuiba:
        //            break;
        //        case ENieLianStyple.fuse:
        //            break;
        //    }
        //    //switch()
        //}






        private void CreateButtonFun(string path,int _part,string _name, GameObject _parent,int _id,int buttonstyple,ECustomStyple eCustomStyple) {
            //Debug.Log(path);
           // Debug.Log(_parent);
            path = "CustomRole/" + path;
            GameEntry.Resource.LoadAsset(AssetUtility.GetUISpriteAsset(path), new LoadAssetCallbacks(
                (assetName, asset, duration, userData) =>
                {
                   // Debug.Log(path);
                   // Debug.Log(_parent);

                    Texture2D tex = (Texture2D)asset;
                    var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero);
                    GameObject _obj = GameObject.Instantiate(buttonItem);
                    Image _objImg = _obj.transform.GetComponent<Image>();
                    _obj.SetActive(true);
                    _objImg.sprite = sprite;
                    _obj.name = part+"";
                    _obj.transform.SetParent(_parent.transform);
                    UICustomBtn uICustomBtn = _obj.GetComponent<UICustomBtn>();
                    uICustomBtn.id = _id;
                    uICustomBtn.eButtonStyple = (EButtonStyple)buttonstyple;
                    uICustomBtn.eCustomStyple = eCustomStyple;
                    uICustomBtn.isCreate = false;
                    uICustomBtn.part = _part;
                    
                    //GameObject 
                    //img.sprite = sprite;
                    //if (nativeSize)
                    //{
                    //    img.SetNativeSize();
                    //}
                }));
        }


        //public void NieLian() { 
        
        //}


        public void ClickFaceChangeBtn()
        {
            GameEntry.Event.Fire(this, CustomRoleFaceEventArgs.Create(EditableFacePart.eye, new Vector3(1, 0, 0)));
        }
    }
    public enum ECustomStyple
    {
        None,
        NieLian,
        Body,
        Cloth
    }
    public enum EButtonStyple
    {
        Button,
        Scroll,
        TiaoSe,
        NorButton,
    }
    public enum ENieLianStyple {
        None,
        faxing,
        lianxing,
        yankuang,
        tongkong,
        meimao,
        bizi,
        erduo,
        zuiba,
        fuse
    }
    public enum EButtonShunXu {
    
        None,
        First,
        Second,
        Third

    }





}
