﻿using System;

namespace XJ.Unity3D.GUI
{
    /// <summary>
    /// ツールバー。
    /// </summary>
    public class Toolbar : BaseGUI
    {
        #region Field

        /// <summary>
        /// 表示するラベル。
        /// </summary>
        public string[] labels;

        /// <summary>
        /// 管理する値。
        /// 選択されたラベルのインデックスを示します。
        /// </summary>
        private int value;

        #endregion Field

        #region Property

        /// <summary>
        /// 表示するラベルを取得、設定します。
        /// </summary>
        public string[] Labels
        {
            get { return this.labels; }
            set { this.labels = value; }
        }

        /// <summary>
        /// 値を取得、設定します。
        /// 選択されたラベルのインデックスを示します。
        /// </summary>
        public int Value
        {
            get
            {
                return this.value;
            }
            set
            {
                this.value = value;
            }
        }

        #endregion Property

        #region Constructor

        /// <summary>
        /// 新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="title">
        /// GUI のタイトル。null のとき描画しません。既定値は null です。
        /// </param>
        /// <param name="boldTitle">
        /// true のときタイトルを太字にする。既定値は true です。
        /// </param>
        /// <param name="value">
        /// 選択されたツールバーのインデックスの初期値。既定値は 0 です。
        /// </param>
        /// <param name="labels">
        /// 表示するラベル。
        /// </param>
        public Toolbar(string title = null, bool boldTitle = true, int value = 0, params string[] labels)
            :base(title, boldTitle)
        {
            this.value = value;

            this.labels = labels;
        }

        #endregion Constructor

        #region Method

        /// <summary>
        /// GUI を描画します。OnGUI メソッドでのみ呼び出すことができます。
        /// </summary>
        /// <returns>
        /// GUI によって変更された値。
        /// </returns>
        public int Show()
        {
            if (this.labels == null ||this.labels.Length == 0)
            {
                throw new Exception(string.Format(ErrorMessage.NullOrNoDataError, this.labels));
            }

            UnityEngine.GUILayout.BeginVertical();
            {
                base.ShowTilte();

                UnityEngine.GUILayout.BeginHorizontal();
                {
                    this.value = UnityEngine.GUILayout.Toolbar(this.value, this.labels);
                }
                UnityEngine.GUILayout.EndHorizontal();
            }
            UnityEngine.GUILayout.EndVertical();

            return this.value;
        }

        #endregion Method
    }
}