using System.Threading;
using System.Threading.Tasks;
namespace io.github.hatayama.uLoopMCP
{
///
/// Tool to find multiple GameObjects with advanced search criteria
///
///
/// This Tool class delegates to FindGameObjectsUseCase for business logic execution,
/// following the UseCase + Tool pattern for separation of concerns.
///
/// Related classes:
/// - FindGameObjectsUseCase: Business logic and orchestration
/// - GameObjectFinderService: Core logic for finding GameObjects
/// - FindGameObjectsSchema: Search parameters
/// - FindGameObjectsResponse: Type-safe response structure
///
[McpTool(Description = "Use first when the user asks about the currently selected GameObject in the Unity Hierarchy. Inspect selected object details and component properties with SearchMode.Selected before using execute-dynamic-code. Also search by name, path, regex, tag, layer, or required components. Use get-hierarchy when the child tree under the selection is needed.")]
public class FindGameObjectsTool : AbstractUnityTool
{
public override string ToolName => "find-game-objects";
protected override async Task ExecuteAsync(FindGameObjectsSchema parameters, CancellationToken cancellationToken)
{
// Create and execute FindGameObjectsUseCase instance
FindGameObjectsUseCase useCase = new(new GameObjectFinderService(), new ComponentSerializer());
return await useCase.ExecuteAsync(parameters, cancellationToken);
}
}
}