using System;
using UnityEngine;

namespace XCharts.Runtime
{
    [Serializable]
    public class VisualMapTheme : ComponentTheme
    {
        [SerializeField] protected float m_BorderWidth;
        [SerializeField] protected Color32 m_BorderColor;
        [SerializeField] protected Color32 m_BackgroundColor;
        [SerializeField][Range(10, 50)] protected float m_TriangeLen = 20f;

        /// <summary>
        /// the width of border.
        /// |边框线宽。
        /// </summary>
        public float borderWidth
        {
            get { return m_BorderWidth; }
            set { if (PropertyUtil.SetStruct(ref m_BorderWidth, value)) SetVerticesDirty(); }
        }
        /// <summary>
        /// the color of dataZoom border.
        /// |边框颜色。
        /// </summary>
        public Color32 borderColor
        {
            get { return m_BorderColor; }
            set { if (PropertyUtil.SetColor(ref m_BorderColor, value)) SetComponentDirty(); }
        }

        /// <summary>
        /// the background color of visualmap.
        /// |背景颜色。
        /// </summary>
        public Color32 backgroundColor
        {
            get { return m_BackgroundColor; }
            set { if (PropertyUtil.SetColor(ref m_BackgroundColor, value)) SetComponentDirty(); }
        }
        /// <summary>
        /// 可视化组件的调节三角形边长。
        /// </summary>
        /// <value></value>
        public float triangeLen
        {
            get { return m_TriangeLen; }
            set { if (PropertyUtil.SetStruct(ref m_TriangeLen, value < 0 ? 1f : value)) SetVerticesDirty(); }
        }

        public VisualMapTheme(ThemeType theme) : base(theme)
        {
            m_BorderWidth = XCSettings.visualMapBorderWidth;
            m_TriangeLen = XCSettings.visualMapTriangeLen;
            m_FontSize = XCSettings.fontSizeLv4;
            switch (theme)
            {
                case ThemeType.Default:
                    m_TextColor = ColorUtil.GetColor("#333");
                    m_BorderColor = ColorUtil.GetColor("#ccc");
                    m_BackgroundColor = ColorUtil.clearColor32;
                    break;
                case ThemeType.Light:
                    m_TextColor = ColorUtil.GetColor("#333");
                    m_BorderColor = ColorUtil.GetColor("#ccc");
                    m_BackgroundColor = ColorUtil.clearColor32;
                    break;
                case ThemeType.Dark:
                    m_TextColor = ColorUtil.GetColor("#B9B8CE");
                    m_BorderColor = ColorUtil.GetColor("#ccc");
                    m_BackgroundColor = ColorUtil.clearColor32;
                    break;
            }
        }

        public void Copy(VisualMapTheme theme)
        {
            base.Copy(theme);
            m_TriangeLen = theme.triangeLen;
            m_BorderWidth = theme.borderWidth;
            m_BorderColor = theme.borderColor;
            m_BackgroundColor = theme.backgroundColor;
        }
    }
}