#nullable enable
using System;
using System.Collections.Generic;
using DTNavigation.Model;
using UnityEngine.UIElements;
namespace DTNavigation.View
{
///
/// 사이드바 UI DOM 빌더.
/// UXML 쿼리, 네비게이션 항목 생성, 상태 클래스 전환을 담당합니다.
///
public sealed class SidebarView : IDisposable
{
// ── 상태별 CSS 클래스 ──────────────────────────────────────
private static readonly string[] StateClasses =
{ "sidebar--one-depth", "sidebar--two-depth", "sidebar--icon-only" };
// ── UXML 요소 참조 ─────────────────────────────────────────
private readonly VisualElement _sidebarRoot;
private readonly VisualElement _navList;
private readonly Button _toggleBtn;
// ── 토글 버튼 콜백 (RegisterCallback 대칭 해제용) ──────────
private EventCallback? _toggleBtnCallback;
// ── 외부 이벤트 ────────────────────────────────────────────
public event Action? OnToggle;
/// 1뎁스 그룹 헤더 클릭 시 발행 (그룹 모델 전달)
public event Action? OnNavGroupClicked;
/// 2뎁스 자식 항목 클릭 시 발행 (itemId 전달)
public event Action? OnNavItemSelected;
// ──────────────────────────────────────────────────────────
public SidebarView(VisualElement documentRoot)
{
_sidebarRoot = documentRoot.Q("sidebar-root")
?? throw new InvalidOperationException("'sidebar-root' 요소를 찾을 수 없습니다.");
_navList = documentRoot.Q("nav-list")
?? throw new InvalidOperationException("'nav-list' 요소를 찾을 수 없습니다.");
_toggleBtn = documentRoot.Q