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

public class AdjacentInfoPanel : UIView 
{
    public List<Text> infos;
    public List<InputField> Edits;
    public List<BuildingAdjacentReactive> Data;

    public List<Text> East;
    public List<Text> South;
    public List<Text> West;
    public List<Text> North;

    public Button SaveButton;

    public override void Awake()
    {
        base.Awake();
        InitData();
        SaveButton.OnClickAsObservable()
            .Subscribe(_ => SaveData());

        transform.Find("TitleBar/CloseButton").GetComponent<Button>().OnClickAsObservable()
            .Subscribe(_ => Hide());
    }
    private void InitData()
    {
        Data = new List<BuildingAdjacentReactive>()
        {
            new BuildingAdjacentReactive(),
            new BuildingAdjacentReactive(),
            new BuildingAdjacentReactive(),
            new BuildingAdjacentReactive()
        };
        Data[0].Id.Value = "East";
        Data[1].Id.Value = "South";
        Data[2].Id.Value = "West";
        Data[3].Id.Value = "North";
        //数据绑定
        for (int i = 0; i < Data.Count; i++)
        {
            BuildingAdjacentReactive temp = Data[i];
            int row = i * 3;
            temp.Street.SubscribeToText(infos[row]).AddTo(gameObject);
            temp.Building.SubscribeToText(infos[row + 1]).AddTo(gameObject);
            temp.Distance.SubscribeToText(infos[row + 2]).AddTo(gameObject);

            temp.Street.SubscribeToText(Edits[row]).AddTo(gameObject);
            temp.Building.SubscribeToText(Edits[row + 1]).AddTo(gameObject);
            temp.Distance.SubscribeToText(Edits[row + 2]).AddTo(gameObject);

            Edits[row].OnValueChangedAsObservable().Subscribe(s => temp.Street.Value = s);
            Edits[row + 1].OnValueChangedAsObservable().Subscribe(s => temp.Building.Value = s);
            Edits[row + 2].OnValueChangedAsObservable().Subscribe(s => temp.Distance.Value = s);
        }
    }

    private void SaveData()
    {
        foreach (var item in Data)
        {
            Debug.Log(item.GetData().Id);
            string url = string.Format(HttpManager.Instance.PostBuildingAdjoinsById, item.Id.Value);
            HttpManager.Instance.Post(url, item.GetData());
        }
    }

    public override void Show()
    {
        base.Show();
        GetData();
    }

    private void GetData()
    {
        string url = HttpManager.Instance.GetAllBuildingAdjoins;
        HttpManager.Instance.Get<List<BuildingAdjacent>>(url, data =>
        {
            foreach (var item in data)
            {
                var temp = Data.Find(a => a.Id.Value == item.Id);
                temp.SetData(item);
            }
        });
    }
}