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

public class UiHandler : MonoBehaviour
{
    private ApiHandler apiHandler;
    public List<GameObject> listGameObjects;
    public List<int> id;

    public GameObject list;

    public Transform container;

    public GameObject popupMenu;

    private Button button;

    private void Start()
    {
        apiHandler = FindAnyObjectByType<ApiHandler>();
        AllClients();
        for (int i = 0; i < listGameObjects.Count; i++)
        {
            button = listGameObjects[i].GetComponent<Button>();
            button.onClick.AddListener(() => ShowInfo(button));
        }
    }

   

    private void Update()
    {
        
       

       
    }


    public void ShowInfo(Button button)
    {
        Debug.Log(button.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text);
      StartCoroutine(PopUp());
    }

    IEnumerator PopUp()
    {
        //for (int i = 0; i < listGameObjects.Count; i++)
        //{
        //    for (int j = 0; j < apiHandler.clients().Length; j++)
        //    {
        //        if (listGameObjects[i].transform.GetChild(0).GetComponent<TextMeshProUGUI>().text ==
        //            apiHandler.clients()[j].label)
        //        {
        //            Debug.Log(apiHandler.clients()[j].id);
        //        }
        //        else
        //        {
        //            Debug.Log("No");
        //        }
        //    }

        //}


        popupMenu.SetActive(true);



        //  popupMenu.transform.GetChild(0). // name Text
        // GetComponent<TextMeshProUGUI>().SetText(kvp.Value.name.ToString());
        //  popupMenu.transform.GetChild(1). // points Text
        //GetComponent<TextMeshProUGUI>().SetText(kvp.Value.points.ToString());
        //  popupMenu.transform.GetChild(2). // adress text
        //GetComponent<TextMeshProUGUI>().SetText(kvp.Value.address.ToString());

       

        yield return new WaitForSeconds(0.5f);
        popupMenu.SetActive(false);
    }

    public void HandelFilter(int val)
    {
        if (val == 0)
        {
            AllClients();
        }
        else if (val == 1)
        {
            OnlyManagers();
        }
        else if (val == 2)
        {
            OnlyNonManagers();
        }
    }

    private void OnlyNonManagers()
    {
        for (int i = 0; i < listGameObjects.Count; i++)
        {
            Destroy(listGameObjects[i].gameObject);
        }

        for (int i = 0; i < apiHandler.clients().Length; i++)
        {
            if (apiHandler.clients()[i].isManager == false)
            {
                GameObject gameObject = Instantiate(list, transform.position, Quaternion.identity);

                gameObject.transform.GetChild(0). // label Text
                       GetComponent<TextMeshProUGUI>().SetText(apiHandler.clients()[i].label.ToString());

                foreach (KeyValuePair<int, Data> kvp in apiHandler.data())
                {
                    if (apiHandler.clients()[i].id == kvp.Key)
                        gameObject.transform.GetChild(1). // point Text
                         GetComponent<TextMeshProUGUI>().SetText(kvp.Value.points.ToString());
                }

                listGameObjects.Add(gameObject);
               
                gameObject.transform.SetParent(container);
            }

        }

    }

    private void OnlyManagers()
    {
        for (int i = 0; i < listGameObjects.Count; i++)
        {
            Destroy(listGameObjects[i].gameObject);
        }

        for (int i = 0; i < apiHandler.clients().Length; i++)
        {
            if (apiHandler.clients()[i].isManager == true) 
            {
                GameObject gameObject = Instantiate(list, transform.position, Quaternion.identity);

                gameObject.transform.GetChild(0). // label Text
                       GetComponent<TextMeshProUGUI>().SetText(apiHandler.clients()[i].label.ToString());

                foreach (KeyValuePair<int, Data> kvp in apiHandler.data())
                {
                    if (apiHandler.clients()[i].id == kvp.Key)
                        gameObject.transform.GetChild(1). // point Text
                         GetComponent<TextMeshProUGUI>().SetText(kvp.Value.points.ToString());
                }
               
                listGameObjects.Add(gameObject);
               
                gameObject.transform.SetParent(container);
            }
            
        }
    }

    private void AllClients()
    {
        for (int i = 0; i < listGameObjects.Count; i++)
        {
            Destroy(listGameObjects[i].gameObject);
        }
        for (int i = 0; i < apiHandler.clients().Length; i++)
        {
            GameObject gameObject = Instantiate(list, transform.position, Quaternion.identity);

            gameObject.transform.GetChild(0). // label Text
                   GetComponent<TextMeshProUGUI>().SetText( apiHandler.clients()[i].label.ToString());

            foreach (KeyValuePair<int , Data> kvp in apiHandler.data())
            {
                if(apiHandler.clients()[i].id == kvp.Key)
                gameObject.transform.GetChild(1). // point Text
                 GetComponent<TextMeshProUGUI>().SetText(kvp.Value.points.ToString());
            }
            listGameObjects.Add(gameObject);
            
            gameObject.transform.SetParent(container);
        }
    }
}