using UnityEngine;
using UnityEngine.UI;
using UniRx;
using System.Collections.Generic;

public class CommandTablePanel : UIView
{
    /// <summary>
    /// 文本框
    /// </summary>
    public List<Text> Infos = new List<Text>();
    /// <summary>
    /// 输入框
    /// </summary>
    public List<InputField> Inputs = new List<InputField>();
    /// <summary>
    /// 编辑按钮
    /// </summary>
    public Button EditorButton;
    /// <summary>
    /// 保存按钮
    /// </summary>
    public Button SaveButton;
    /// <summary>
    /// 取消按钮
    /// </summary>
    public Button CancelButton;
    /// <summary>
    /// 数据
    /// </summary>
    public Dictionary<int, StringReactiveProperty> Datas = new Dictionary<int, StringReactiveProperty>();
    /// <summary>
    /// Text面板
    /// </summary>
    public GameObject InfoPanel;
    /// <summary>
    /// Input面板
    /// </summary>
    public GameObject InputPanel;
    /// <summary>
    /// 默认面板
    /// </summary>
    public GameObject DefualtPanel;
    /// <summary>
    /// 保存面板
    /// </summary>
    public GameObject SavePanel;
    public override void Awake()
    {
        base.Awake();
        InitUI();
        InitData();
        InitBinding();
    }

    /// <summary>
    /// 显示
    /// </summary>
    public override void Show()
    {
        base.Show();
        GetData();
    }
    /// <summary>
    /// 初始化UI
    /// </summary>
    private void InitUI()
    {
        EditorButton = Find<Button>("Bottom/DefaultPanel/EditorButton");
        SaveButton = Find<Button>("Bottom/EditorPanel/SaveButton");
        CancelButton = Find<Button>("Bottom/EditorPanel/CancelButton");
        InfoPanel = Find("Scroll View/Viewport/Content/Background/InfoPanel");
        InputPanel = Find("Scroll View/Viewport/Content/Background/InputPanel");
        DefualtPanel = Find("Bottom/DefaultPanel");
        SavePanel = Find("Bottom/EditorPanel");
        for (int i = 0; i < 165; i++)
        {
            var t = Find<Text>("Scroll View/Viewport/Content/Background/InfoPanel/Info" + i);
            Infos.Add(t);
        }
        for (int i = 0; i < 165; i++)
        {
            var t = Find<InputField>("Scroll View/Viewport/Content/Background/InputPanel/Input" + i);
            Inputs.Add(t);
        }
    }
    /// <summary>
    /// 初始化数据
    /// </summary>
    private void InitData()
    {
        //初始化Datas
        for (int i = 0; i < 165; i++)
        {
            Datas.Add(i, new StringReactiveProperty(""));
        }
    }
    /// <summary>
    /// 初始化绑定
    /// </summary>
    private void InitBinding()
    {
        for (int i = 0; i < Datas.Count; i++)
        {
            int num = i;
            Datas[num].SubscribeToText(Infos[num]).AddTo(gameObject);

            Datas[num].SubscribeToText(Inputs[num]).AddTo(gameObject);

            Inputs[num].OnEndEditAsObservable().Subscribe(value =>
            {
                Datas[num].Value = value;
            }).AddTo(gameObject);
        }

        //编辑
        EditorButton.OnClickAsObservable()
            .Subscribe(_ =>
            {
                InfoPanel.SetActive(false);
                InputPanel.SetActive(true);
                DefualtPanel.SetActive(false);
                SavePanel.SetActive(true);
            });
        //取消编辑
        CancelButton.OnClickAsObservable()
            .Subscribe(_ =>
            {
                InfoPanel.SetActive(true);
                InputPanel.SetActive(false);
                DefualtPanel.SetActive(true);
                SavePanel.SetActive(false);
            });
        //保存
        SaveButton.OnClickAsObservable()
            .Subscribe(_ =>
            {
                InfoPanel.SetActive(true);
                InputPanel.SetActive(false);
                DefualtPanel.SetActive(true);
                SavePanel.SetActive(false);
                SaveData();
            });
    }
    /// <summary>
    /// 保存数据
    /// </summary>
    void SaveData()
    {
        Dictionary<int, string> postData = new Dictionary<int, string>();
        foreach (var item in Datas)
        {
            postData.Add(item.Key, item.Value.Value);
        }
        string url = string.Format(HttpManager.Instance.PostOrgCmds);
        HttpManager.Instance.Post(url, postData);
    }
    /// <summary>
    /// 获取数据
    /// </summary>
    void GetData()
    {
        string url = string.Format(HttpManager.Instance.GetOrgCmds);
        HttpManager.Instance.Get<Dictionary<int, string>>(url, datas =>
        {
            foreach (var item in datas)
            {
                Datas[item.Key].Value = item.Value;
            }
        });
    }

}