using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using SC.XR.Unity;
using Blue;
using LitJson;
using Immersal.AR;
using XRTool.Util;

public class SettingPanel : AbstractController
{
    public Text spMRtext;

    public Toggle MinMap;
    public Toggle NoMinMap;
    public Toggle DingWei;
    public Toggle feiDingWei;
    public Toggle LuJIng;
    public Toggle NoLuJIng;
    public Transform ChooseLine;
    public Toggle LineItem;
    public Transform LineItemParent;
    public Button SaveData;

    [SerializeField, Tooltip("小地图信息")]
    private MinMap m_MinMap;
    [SerializeField, Tooltip("路径控制器")]
    private RouteCtr m_RouteCtr;

    private List<Toggle> Lines;
    SpoitValue nowsp;
    public static Dictionary<int, bool> dingweilist = new Dictionary<int, bool>();

    private void Awake()
    {
        Lines = new List<Toggle>();
        SaveData.onClick.AddListener(OnClickSaveData);
        MinMap.onValueChanged.AddListener(OnMinMapValueChange);
        LuJIng.onValueChanged.AddListener(OnLuJIngValueChange);
        DingWei.onValueChanged.AddListener(DingWeiValueChange);
        setMsg(null);
    }

    private void DingWeiValueChange(bool arg0)
    {
        if(nowsp!=null)
        {
            if (dingweilist.ContainsKey(nowsp.id))
            {
                dingweilist[nowsp.id] = arg0;
            }
            else
            {
                dingweilist.Add(nowsp.id,arg0);
            }

            JsonData data = new JsonData();
            data["id"] = nowsp.id;
            data["projectId"] = SceneChoose.Sid;
            data["location"] = arg0;
            HttpTool.Instance.Post("/viewpoint/locationPoint", data.ToJson(), (string str) => { });
        }
    }

    private void OnEnable()
    {
        MinMap.interactable = false;
        NoMinMap.interactable = false;
        HttpTool.Instance.Get("/user/getUserInfo", (string str) =>
        {
            MinMap.interactable = true;
            NoMinMap.interactable = true;
            JsonData data = JsonMapper.ToObject(str);
            if (data["data"]["minMap"].ToString() == "0")
            {
                NoMinMap.isOn = true;
                m_MinMap.gameObject.SetActive(false);

            }
            else
            {

                MinMap.isOn = true;
                m_MinMap.gameObject.SetActive(true);
            }
        });
        //   HttpTool.Instance.Post("/viewpoint/locationPoint", data.ToJson(), (string str) => { });
        // MinMap.isOn = this.GetService<IMinMapService>().setMinMap == 1 ? true : false;
    }

    public void setMsg(SpoitValue sv)
    {
        nowsp = sv;
        if (sv!=null)
        {
            feiDingWei.gameObject.SetActive(true);
            DingWei.gameObject.SetActive(true);
            spMRtext.text = sv.name;

            if (dingweilist.ContainsKey(nowsp.id))
            {
                if(dingweilist[nowsp.id])
                {
                    XRLocalizer.Instance.gameObject.SetActive(true);
                    DingWei.isOn = true;
                }
                else
                {

                    if (ARSpace.isFind)
                    {
                        XRLocalizer.Instance.gameObject.SetActive(false);
                    }
                    feiDingWei.isOn = true;
                }
            }
            else
            {
                if(sv.location)
                {
                    dingweilist.Add(nowsp.id,true);
                    XRLocalizer.Instance.gameObject.SetActive(true);
                    DingWei.isOn = true;

                }
                else
                {
                    if (ARSpace.isFind)
                    {
                        XRLocalizer.Instance.gameObject.SetActive(false);
                    }
                    feiDingWei.isOn = true;
                }

            }

        }
        else
        {
            spMRtext.text = "----";
            feiDingWei.isOn = false;
            feiDingWei.gameObject.SetActive(false);
            DingWei.gameObject.SetActive(false);
            //if(ARSpace.isFind)
            //{
                XRLocalizer.Instance.gameObject.SetActive(true);
            //}
        }
    }

    public void Init()
    {
        CreateLines();
        MinMap.isOn = true;
        m_MinMap.gameObject.SetActive(true);
        LuJIng.isOn = true;

        if (Lines.Count > 0)
        {
            Lines[0].isOn = true;
        }
        gameObject.SetActive(false);
    }

    private void OnMinMapValueChange(bool ison)
    {
        //Debug.Log(data);
        JsonData data = new JsonData();

        data["minMap"] = ison?1:0;
        HttpTool.Instance.Post("/user/settings", data.ToJson(), (string str)=> { });
        m_MinMap.gameObject.SetActive(ison);
    }

    private void OnLuJIngValueChange(bool ison)
    {
        m_RouteCtr.gameObject.SetActive(ison);
        for (int i = 0; i < Lines.Count; i++)
        {
            Lines[i].interactable = ison;
        }
    }

    private void CreateLines()
    {
        var lines = m_RouteCtr.List_route;
        for (int i = 0; i < lines.Count; i++)
        {
            Toggle obj = Instantiate(LineItem, LineItemParent);
            obj.isOn = false;
            obj.transform.Find("Label").GetComponent<Text>().text = lines[i].name;
            var item = obj.gameObject.AddComponent<LuJingItem>();
            item.OnToggleSelect += OnCLickToggle;
            obj.gameObject.SetActive(true);
            Lines.Add(obj);
        }
    }

    private void OnCLickToggle(int index, bool ison)
    {
        m_RouteCtr.SettingLuJing(index, ison);
        m_MinMap.SetRoute(index, ison);
    }

    private void OnClickSaveData()
    {
        this.SendCommand(new MinMapGetSetCommand(m_MinMap.gameObject.activeSelf ? 1 : 0));
     //  DataManager.Instance.SaveSpoits();

         GameManager.Instance.StartCoroutine(UIEditorPanel.Instance.SetSpoitInfo());
        DataManager.Instance.IsSavedData = true;
    }




}