using UnityEngine;
using UnityEngine.UI;

public static class PanelComponentFactory
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="position"></param>
    /// <param name="size"></param>
    /// <param name="scale"></param>
    /// <returns></returns>
    public static GameObject BuildCustomPanel(Vector3 position, Vector2 size, Vector3 scale)
    {
        var panel = DialoguePanelsPrefabsList.GetPanel();

        panel.GetComponent<RectTransform>().position = position;
        panel.GetComponent<RectTransform>().localScale = scale;
        panel.GetComponent<RectTransform>().sizeDelta = size;


        GameObject prefab = MonoBehaviour.Instantiate(panel, panel.GetComponent<RectTransform>().localPosition, panel.transform.rotation) as GameObject;
        prefab.name = "DialoguePanel";

        prefab.transform.SetParent(GameObject.FindGameObjectWithTag("GUI").transform, false);

        GameObject continueButton = BuildContinueButton(new Vector3(-100, 150, 0), new Vector2(115, 90), new Vector3(1.2f, 1.2f, 1));
        continueButton.transform.SetParent(prefab.transform, false);

        return prefab;
    }

    public static GameObject BuildCustomButton(ButtonPanelModel answerModel)
    {
        var panel = DialoguePanelsPrefabsList.GetBaseButton();

        panel.GetComponent<RectTransform>().position = answerModel.Position;
        panel.GetComponent<RectTransform>().localScale = answerModel.Scale;
        panel.GetComponent<RectTransform>().sizeDelta = answerModel.Size;

        GameObject prefab = MonoBehaviour.Instantiate(panel, panel.GetComponent<RectTransform>().localPosition, panel.transform.rotation) as GameObject;
        prefab.name = answerModel.Response;

        // Assign content
        prefab.transform.Find("Text").GetComponent<Text>().text = answerModel.Response;

        // Assign actions
        prefab.GetComponent<Button>().onClick.AddListener(() => answerModel.ButtonActions.Invoke());

        return prefab;
    }

    public static GameObject BuildAcceptButton(Vector3 position, Vector2 size, Vector3 scale)
    {
        var panel = DialoguePanelsPrefabsList.GetAcceptButton();

        panel.GetComponent<RectTransform>().position = position;
        panel.GetComponent<RectTransform>().localScale = scale;
        panel.GetComponent<RectTransform>().sizeDelta = size;


        GameObject prefab = MonoBehaviour.Instantiate(panel, panel.GetComponent<RectTransform>().localPosition, panel.transform.rotation) as GameObject;
        prefab.name = "AcceptButton";

        return prefab;
    }

    public static GameObject BuildRejectButton(Vector3 position, Vector2 size, Vector3 scale)
    {
        var panel = DialoguePanelsPrefabsList.GetRejectButton();

        panel.GetComponent<RectTransform>().position = position;
        panel.GetComponent<RectTransform>().localScale = scale;
        panel.GetComponent<RectTransform>().sizeDelta = size;


        GameObject prefab = MonoBehaviour.Instantiate(panel, panel.GetComponent<RectTransform>().localPosition, panel.transform.rotation) as GameObject;
        prefab.name = "RejectButton";

        return prefab;
    }

    public static GameObject BuildContinueButton(Vector3 position, Vector2 size, Vector3 scale)
    {
        var panel = DialoguePanelsPrefabsList.GetContinueButton();

        panel.GetComponent<RectTransform>().position = position;
        panel.GetComponent<RectTransform>().sizeDelta = size;
        panel.GetComponent<RectTransform>().localScale = scale;

        GameObject prefab = MonoBehaviour.Instantiate(panel, panel.GetComponent<RectTransform>().localPosition, panel.transform.rotation) as GameObject;
        prefab.name = "ContinueButton";

        return prefab;
    }
}