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

namespace SimplifyXR
{

    public class ElementRoot : MonoBehaviour
    {
        public List<Element> elements;

        [Header("Base Images")]
        public Image basePanelBackground;
        public Image titleBackground;

        [Header("Base Buttons")]
        public Button closeButton;

        [Header("Base Text")]
        public TextMeshProUGUI panelTitle;


        public Element GetElementByID(string id)
        {
            return elements.Where(e => e.id == id)
                .FirstOrDefault();
        }

        public T GetElementAsType<T>(string id) where T : Object
        {
            var element = GetElementByID(id);
            var convertedElement = element.element.GetType().IsAssignableFrom(typeof(T)) ?
                element.element as T :
                null;

            return convertedElement;
        }

        public List<Element> GetButtonElements()
        {
            var buttons = elements.Where(e =>
            e.themeClass == ThemeClass.Button ||
            e.element.GetType().IsAssignableFrom(typeof(Button)))
                .ToList();
            return buttons;
        }

        public List<Element> GetDisplayOptionalElements()
        {
            return elements.Where(e => e.displayOptional).ToList();
        }

    }

    [System.Serializable]
    public class Element : IThemable
    {
        public string id;
        public Object element;
        public ThemeClass themeClass;
        public bool displayOptional;
        public bool imageThemeable;

        public ThemeClass GetThemeClass()
        {
            return themeClass;
        }

        public Object GetThemeObject()
        {
            return element;
        }

        public bool IsImageThemeable()
        {
            return imageThemeable;
        }
    }

    public enum ThemeClass
    {
        None,
        Primary,
        Secondary,
        Button, 
        ProductLogo,
        CompanyLogo,
        DeveloperALogo,
        DeveloperBLogo
    }
}
