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

public class ListDialog : MonoBehaviour
{
    public Action<string> Action;

    public List<string> Lists;
    public GameObject ButtonPrefab;
    public GameObject Panel;

    public static void Show(List<string> list, Action<string> action)
    {
        Present(list, action);
    }

    public static void Present(List<string> list, Action<string> action)
    {
        GameObject listDialogPanel = GameObject.Find("ListDialogPanel");

        Image image = listDialogPanel.GetComponent<Image>();
        image.enabled = true;

        ListDialog listDialog = listDialogPanel.GetComponent<ListDialog>();
        listDialog.Panel.SetActive(true);
        listDialog.Lists = list;
        listDialog.Action = action;

        GameObject content = listDialog.transform.Find("Panel").Find("Scroll View").Find("Viewport").Find("Content").gameObject;
        foreach (Transform child in content.transform)
        {
            GameObject.Destroy(child.gameObject);
        }

        int posY = (int)content.transform.position.y;
        posY -= 150;

        foreach (string value in list)
        {
            Debug.Log("-------" + value);

            GameObject button = (GameObject)Instantiate(listDialog.ButtonPrefab);
            button.transform.SetParent(content.transform, false);
            button.transform.position = new Vector3(button.transform.position.x, posY, button.transform.position.z);

            Button tempButton = button.GetComponent<Button>();
            tempButton.onClick.AddListener(() => listDialog.click(value));

            button.GetComponentInChildren<Text>().text = value;
            button.GetComponentInChildren<Text>().fontSize = 40;

            posY -= 150;
        }
    }

    public static void Dismiss()
    {
        GameObject listDialogPanel = GameObject.Find("ListDialogPanel");

        Image image = listDialogPanel.GetComponent<Image>();
        image.enabled = false;

        ListDialog listDialog = listDialogPanel.GetComponent<ListDialog>();
        listDialog.Panel.SetActive(false);
    }

    public void Cancel()
    {
        Action.Invoke(null);
        Dismiss();
    }

    public void click(string value)
    {
        Action.Invoke(value);
        Dismiss();
    }
}