using UnityEngine;
using UVC.UI.Toolbar.Model;
using UVC.UI.Toolbar.View;
namespace UVC.UI.ToolBar.View
{
///
/// 툴바 버튼의 UI 생성, 설정 및 업데이트 로직을 처리하는 인터페이스입니다.
/// 각 버튼 타입(표준, 토글, 라디오, 확장 등)에 대한 구체적인 UI 처리 클래스가 이 인터페이스를 구현합니다.
///
public interface IButtonViewProcessor
{
///
/// 지정된 버튼 모델에 대한 UI GameObject를 생성하고 초기화합니다.
///
/// UI를 생성할 버튼의 데이터 모델입니다.
/// 생성된 UI GameObject가 자식으로 추가될 부모 Transform입니다.
/// 현재 ToolbarView의 컨텍스트입니다. 프리팹 참조, 헬퍼 메서드 접근 등에 사용됩니다.
/// 생성된 UI GameObject입니다. 생성 실패 시 null을 반환할 수 있습니다.
GameObject CreateButtonUI(ToolbarButtonBase buttonModel, Transform parentContainer, ToolbarView viewContext);
///
/// 생성된 버튼 UI GameObject에 대해 초기 시각적 요소(텍스트, 아이콘 등)를 설정하고,
/// 사용자 상호작용(예: 클릭 이벤트) 시 모델의 메서드가 호출되도록 이벤트를 바인딩합니다.
/// 또한, 모델의 상태 변경 이벤트(OnStateChanged, OnToggleStateChanged 등)를 구독하여 UI가 업데이트되도록 설정합니다.
///
/// 설정할 버튼의 데이터 모델입니다.
/// 모델에 해당하는, 화면에 표시될 UI GameObject입니다.
/// 현재 ToolbarView의 컨텍스트입니다.
void SetupButtonInteractions(ToolbarButtonBase buttonModel, GameObject buttonUIObject, ToolbarView viewContext);
///
/// 버튼 모델의 공통적인 상태(텍스트, 아이콘, 활성화 상태 등)가 변경되었을 때,
/// 해당 버튼 UI의 시각적 요소를 업데이트합니다.
///
/// 상태가 변경된 버튼의 모델입니다.
/// 업데이트할 UI GameObject입니다.
/// 현재 ToolbarView의 컨텍스트입니다.
void UpdateCommonButtonVisuals(ToolbarButtonBase buttonModel, GameObject buttonUIObject, ToolbarView viewContext);
///
/// 토글 가능한 버튼(ToolbarToggleButton, ToolbarRadioButton)의 선택 상태(IsSelected)가 모델에서 변경되었을 때 호출됩니다.
/// 해당 UI Toggle 컴포넌트의 isOn 상태를 모델의 IsSelected 값과 동기화합니다.
///
/// IsSelected 상태가 변경된 토글/라디오 버튼의 모델입니다.
/// 업데이트할 UI GameObject입니다.
/// 모델의 새로운 IsSelected 값입니다.
/// 현재 ToolbarView의 컨텍스트입니다.
void UpdateToggleStateVisuals(ToolbarToggleButton toggleButtonModel, GameObject buttonUIObject, bool isSelected, ToolbarView viewContext);
}
}