namespace UVC.UI.Toolbar.Model
{
    /// <summary>
    /// 한 번 클릭으로 특정 동작을 수행하는 표준적인 버튼입니다.
    /// ToolbarButtonBase를 상속받아 텍스트, 아이콘, 툴팁, 활성화 상태 및 클릭 커맨드 기능을 가집니다.
    /// </summary>
    /// <remarks>
    /// 이 클래스는 ToolbarButtonBase의 기능을 그대로 사용하며, 특별히 추가된 로직은 없습니다.
    /// 복잡한 상태 관리 없이 단순 클릭 동작만을 필요로 하는 경우에 사용됩니다.
    /// View 레이어(예: ToolbarView)에서는 이 모델에 해당하는 UI 요소(예: UnityEngine.UI.Button)를 생성하고,
    /// 사용자가 UI 버튼을 클릭하면 이 모델의 ExecuteClick 메서드가 호출되도록 연결합니다.
    /// </remarks>
    /// <example>
    /// <code>
    /// // Toolbar 또는 ToolbarModel 등에서 ToolbarStandardButton 생성 및 사용 예시
    /// 
    /// // 1. 버튼 클릭 시 실행될 커맨드 정의 (예: 간단한 로그 출력)
    /// ICommand saveCommand = new ActionCommand(() => 
    /// {
    ///     UnityEngine.Debug.Log("저장 버튼 클릭됨. 저장 로직 실행...");
    ///     // 여기에 실제 저장 로직 구현
    /// });
    /// 
    /// // 2. ToolbarStandardButton 인스턴스 생성 및 속성 설정
    /// ToolbarStandardButton saveButton = new ToolbarStandardButton
    /// {
    ///     Text = "button_save", // 버튼 텍스트 (다국어 키 또는 실제 텍스트)
    ///     IconSpritePath = "icons/toolbar/save_icon", // Resources 폴더 내 아이콘 경로
    ///     Tooltip = "tooltip_save_button_description", // 툴팁 (다국어 키 또는 실제 텍스트)
    ///     ClickCommand = saveCommand, // 위에서 정의한 커맨드 할당
    ///     IsEnabled = true // 버튼 활성화 상태
    /// };
    /// 
    /// // 3. 생성된 버튼 모델을 ToolbarModel에 추가 (ToolbarModel의 AddItem 또는 AddStandardButton 메서드 사용)
    /// // toolbarModel.AddItem(saveButton); 
    /// // 또는
    /// // toolbarModel.AddStandardButton("button_save", "icons/toolbar/save_icon", saveCommand, "tooltip_save_button_description");
    /// 
    /// // 4. 버튼 상태 변경 예시
    /// // saveButton.IsEnabled = false; // 버튼 비활성화 (UI에 반영됨)
    /// // saveButton.Text = "button_saved"; // 버튼 텍스트 변경 (UI에 반영됨)
    /// </code>
    /// </example>
    public class ToolbarStandardButton : ToolbarButtonBase
    {
        // ToolbarStandardButton은 ToolbarButtonBase의 모든 기능을 상속받습니다.
        // 특별히 ToolbarStandardButton만을 위한 추가적인 속성이나 메서드가 필요하다면 여기에 정의할 수 있습니다.

        // 예시: 생성자를 통해 주요 속성을 설정하도록 할 수도 있습니다.
        // /// <summary>
        // /// 지정된 속성으로 ToolbarStandardButton의 새 인스턴스를 초기화합니다.
        // /// </summary>
        // /// <param name="text">버튼 텍스트 또는 다국어 키입니다.</param>
        // /// <param name="iconSpritePath">아이콘의 Resources 경로입니다.</param>
        // /// <param name="command">클릭 시 실행될 커맨드입니다.</param>
        // /// <param name="tooltip">툴팁 텍스트 또는 다국어 키입니다.</param>
        // public ToolbarStandardButton(string text, string iconSpritePath = null, ICommand command = null, string tooltip = null)
        // {
        //     this.Text = text;
        //     this.IconSpritePath = iconSpritePath;
        //     this.ClickCommand = command;
        //     this.TooltipKey = tooltip;
        // }

        // ToolbarButtonBase의 ExecuteClick 메서드를 그대로 사용합니다.
        // 만약 StandardButton만의 특별한 클릭 전/후 처리가 필요하다면 ExecuteClick 메서드를 override 할 수 있습니다.
        // /// <summary>
        // /// 버튼 클릭 로직을 실행합니다.
        // /// </summary>
        // /// <param name="parameter">커맨드에 전달할 파라미터입니다.</param>
        // public override void ExecuteClick(object parameter = null)
        // {
        //     if (!IsEnabled) return;
        //     
        //     // UnityEngine.Debug.Log($"ToolbarStandardButton '{Text}' ExecuteClick 호출됨.");
        //     
        //     // 부모 클래스의 ExecuteClick (ClickCommand 실행 등)
        //     base.ExecuteClick(parameter); 
        //     
        //     // 여기에 ToolbarStandardButton만의 추가적인 로직이 있다면 작성
        //     // 예를 들어, 클릭 후 특정 사운드 재생 등
        // }

        /// <summary>
        /// 이 버튼 모델에 연결된 모든 이벤트 핸들러를 정리합니다.
        /// ToolbarStandardButton은 ToolbarButtonBase에서 상속받은 이벤트 외에 추가적인 이벤트가 없으므로,
        /// 기본 구현을 호출합니다.
        /// </summary>
        public override void ClearEventHandlers()
        {
            base.ClearEventHandlers();
            // ToolbarStandardButton에 특화된 이벤트가 있다면 여기서 정리합니다.
            // 예: CustomEvent = null;
        }
    }
}