using System;
using System.Collections.Generic;
using UnityEngine;

namespace FairyGUI.Utils
{
    /// <summary>
    /// 
    /// </summary>
    public class HtmlSelect : IHtmlObject
    {
        public GComboBox comboBox { get; private set; }

        public const string CHANGED_EVENT = "OnHtmlSelectChanged";

        public static string resource;

        RichTextField _owner;
        HtmlElement _element;
        EventCallback0 _changeHandler;

        public HtmlSelect()
        {
            if (resource != null)
            {
                comboBox = UIPackage.CreateObjectFromURL(resource).asComboBox;
                _changeHandler = () =>
                {
                    _owner.DispatchEvent(CHANGED_EVENT, null, this);
                };
            }
            else
                Debug.LogWarning("FairyGUI: Set HtmlSelect.resource first");
        }

        public DisplayObject displayObject
        {
            get { return comboBox.displayObject; }
        }

        public HtmlElement element
        {
            get { return _element; }
        }

        public float width
        {
            get { return comboBox != null ? comboBox.width : 0; }
        }

        public float height
        {
            get { return comboBox != null ? comboBox.height : 0; }
        }

        public void Create(RichTextField owner, HtmlElement element)
        {
            _owner = owner;
            _element = element;

            if (comboBox == null)
                return;

            comboBox.onChanged.Add(_changeHandler);

            int width = element.GetInt("width", comboBox.sourceWidth);
            int height = element.GetInt("height", comboBox.sourceHeight);
            comboBox.SetSize(width, height);
            comboBox.items = (string[])element.Get("items");
            comboBox.values = (string[])element.Get("values");
            comboBox.value = element.GetString("value");
        }

        public void SetPosition(float x, float y)
        {
            if (comboBox != null)
                comboBox.SetXY(x, y);
        }

        public void Add()
        {
            if (comboBox != null)
                _owner.AddChild(comboBox.displayObject);
        }

        public void Remove()
        {
            if (comboBox != null && comboBox.displayObject.parent != null)
                _owner.RemoveChild(comboBox.displayObject);
        }

        public void Release()
        {
            if (comboBox != null)
                comboBox.RemoveEventListeners();

            _owner = null;
            _element = null;
        }

        public void Dispose()
        {
            if (comboBox != null)
                comboBox.Dispose();
        }
    }
}
