using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MCPForUnity.Editor.Clients;
using MCPForUnity.Editor.Constants;
using MCPForUnity.Editor.Helpers;
using MCPForUnity.Editor.Models;
using MCPForUnity.Editor.Services;
using MCPForUnity.Editor.Services.Transport;
using MCPForUnity.Editor.Tools;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace MCPForUnity.Editor.Windows.Components.Tools
{
///
/// Controller for the Tools section inside the MCP for Unity editor window.
/// Provides discovery, filtering, and per-tool enablement toggles.
/// Tools are grouped by their Group property (core first, then alphabetical).
///
public class McpToolsSection
{
private readonly Dictionary toolToggleMap = new();
private Toggle projectScopedToolsToggle;
private Label summaryLabel;
private Label noteLabel;
private Button enableAllButton;
private Button disableAllButton;
private Button rescanButton;
private Button reconfigureButton;
private VisualElement categoryContainer;
private List allTools = new();
private readonly Dictionary groupToggleMap = new();
private readonly List<(Foldout foldout, string title, List tools)> foldoutEntries = new();
/// Human-friendly names for tool groups shown in the UI.
private static readonly Dictionary GroupDisplayNames = new(StringComparer.OrdinalIgnoreCase)
{
{ "core", "Core Tools" },
{ "vfx", "VFX & Shaders" },
{ "animation", "Animation" },
{ "ui", "UI Toolkit" },
{ "scripting_ext", "Scripting Extensions" },
{ "testing", "Testing" },
{ "probuilder", "ProBuilder — Experimental" },
{ "profiling", "Profiling & Frame Debugger" },
};
public VisualElement Root { get; }
public McpToolsSection(VisualElement root)
{
Root = root;
CacheUIElements();
RegisterCallbacks();
}
private void CacheUIElements()
{
projectScopedToolsToggle = Root.Q("project-scoped-tools-toggle");
summaryLabel = Root.Q