using SC.XR.Unity;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 双排扇形
/// </summary>
public class DRFanLayout : MonoBehaviour
{
    public static List<ObjectValue> CalLayout(MaterialObl materialObls, GameObject par, out MaterialObl newmaterial)
    {
        newmaterial = materialObls;
        BaseTemPlate text = new BaseTemPlate();
        MaterialObjValue textmat = null;
        List<BaseTemPlate> noText = new List<BaseTemPlate>();
        List<ObjectValue> objectValues = new List<ObjectValue>();

        for (int i = 0; i < materialObls.materialList.Count; i++)
        {
            var mat = materialObls.materialList[i];
            GameObject go = null;
            switch (int.Parse(mat.type))
            {
                case (int)MaterialType.None:
                    break;
                case (int)MaterialType.Image:
                    var pImage = ResMgr.Instance.Load<GameObject>("Template/Prefab/Image");
                    go = Instantiate(pImage, par.transform);
                    var imageitem = go.AddComponent<TemplateImage>();
                    go.SetActive(true);
                    imageitem.SetData(mat, materialObls.updateTime);
                    noText.Add(imageitem);
                    break;
                case (int)MaterialType.Video:
                    var pVideo = ResMgr.Instance.Load<GameObject>("Template/Prefab/Video");
                    go = Instantiate(pVideo, par.transform);
                    var videoitem = go.AddComponent<TemplateVideo>();
                    go.SetActive(true);
                    videoitem.SetData(mat, materialObls.updateTime);
                    noText.Add(videoitem);
                    break;
                case (int)MaterialType.Text:
                    textmat = mat;
                    var pText = ResMgr.Instance.Load<GameObject>("Template/Prefab/Text");
                    go = Instantiate(pText, par.transform);
                    var textitem = go.AddComponent<TemplateText>();
                    go.SetActive(true);
                    textitem.SetData(mat, materialObls.updateTime);
                    text = textitem;
                    go.SetActive(false);
                    break;
                default:
                    break;
            }

            if (go != null)
            {
                go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
                go.AddComponent<EditorEventHandler>().Type = (MaterialType)(int.Parse(mat.type));
                if (materialObls.select)
                {
                    go.transform.localPosition = mat.ObjectTransform.nowPos;
                    go.transform.localEulerAngles = mat.ObjectTransform.nowRot;
                    go.transform.localScale = mat.ObjectTransform.nowScale;
                }
                else
                {
                    go.transform.localEulerAngles = Vector3.zero;
                    go.transform.localScale = new Vector3(1, 1, 1);

                    if (int.Parse(mat.type) != (int)MaterialType.Text)
                    {
                        go.transform.localPosition = Vector3.zero;
                    }
                    else
                    {
                        //Set text position
                        if (mat.textPosition == "top")
                        {
                            go.transform.localPosition = new Vector3(0, 1f, 0);
                        }
                        else if (mat.textPosition == "bottom")
                        {
                            go.transform.localPosition = new Vector3(0, -1f, 0);
                        }
                    }
                    mat.ObjectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
                }

                ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
                objectValues.Add(objectValue);
            }
        }

        #region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回

        if (!materialObls.select)
        {
            Column(noText, par);

            //第一次排列后,需调整初始坐标和当前坐标保持一致
            for (int i = 0; i < objectValues.Count; i++)
            {
                objectValues[i].InitTransform();
                objectValues[i].Object.SetActive(true);
                var go = objectValues[i].Object;
                newmaterial.materialList[objectValues[i].ID].ObjectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
            }
        }

        if (textmat != null)
        {
            text.gameObject.SetActive(true);
        }
        #endregion

        return objectValues;
    }

    /// <summary>
    /// 根据数量排列图片或文字
    /// </summary>
    /// <param name="data">图片和视频列表</param>
    private static void Column(List<BaseTemPlate> data, GameObject game)
    {
        var scgrid = game.AddComponent<SCGridLayoutGroup>();
        scgrid.IsIgnoreInactiveObj = true;
        scgrid.LayoutType = LayoutTypes.Horizontal;
        scgrid.Columns = 3;
        scgrid.SpaceX = 0.7f;
        scgrid.SpaceY = 0.7f;
        scgrid.RefreshInfo();
        Destroy(scgrid);

        data[0].transform.localPosition += new Vector3(0, 0, -0.2f);
        data[0].transform.localRotation = Quaternion.Euler(0, -30, 0);

        data[2].transform.localPosition += new Vector3(0, 0, -0.2f);
        data[2].transform.localRotation = Quaternion.Euler(0, 30, 0);

        data[3].transform.localPosition += new Vector3(0, 0, -0.2f);
        data[3].transform.localRotation = Quaternion.Euler(0, -30, 0);

        if (data.Count < 6)
            Debug.LogWarning("双排扇形不足六个元素图片或视频");
        else
        {
            data[5].transform.localPosition += new Vector3(0, 0, -0.2f);
            data[5].transform.localRotation = Quaternion.Euler(0, 30, 0);
        }
    }
}