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

public class PowerTaskListPanel : UIView
{
    public GameObject Item;
    public override void Awake()
    {
        base.Awake();

        transform.Find("TitleBar/CloseButton").GetComponent<Button>().OnClickAsObservable()
            .Subscribe(_ => Hide());
    }
    public override void Show()
    {
        base.Show();
        LoadData();
    }
    public override void Hide()
    {
        base.Hide();
        UnLoadData();
    }

    private void LoadData()
    {
        var url = HttpManager.Instance.GetPowerTasks;
        HttpManager.Instance.Get<TaskDatas>(url, data =>
        {
            switch (PowerManager.Instance.taskType)
            {
                case TaskType.Character:
                    CreateList(data.Character);
                    break;
                case TaskType.Car:
                    CreateList(data.Car);
                    break;
                case TaskType.WaterMonitor:
                    CreateList(data.Firemonitor);
                    break;
            }
        });
    }

    private void CreateList(List<TaskData> list)
    {
        foreach (TaskData td in list)
        {
            GameObject go = Instantiate(Item) as GameObject;
            go.SetActive(true);
            go.transform.SetParent(Item.transform.parent, false);
            go.transform.Find("Label").GetComponent<Text>().text = td.Task;
            go.GetComponent<Toggle>().OnValueChangedAsObservable()
                .Subscribe(value => OnItemValueChanged(value, td.Task)).AddTo(gameObject);
        }
    }

    private void OnItemValueChanged(bool value, string task)
    {
        if (value)
        {
            UIManager.Instance.GetView<PowerAttributePanel>().TaskInput.text = task;
            Hide();
        }
    }

    private void UnLoadData()
    {
        var parent = Item.transform.parent;
        for (int i = 0; i < parent.childCount; i++)
        {
            if (parent.GetChild(i).gameObject.activeSelf)
            {
                GameObject.Destroy(parent.GetChild(i).gameObject);
            }
        }
    }
}