using Newtonsoft.Json.Linq;
using System.Collections.Generic;

namespace LLM.Editor.Commands
{
    /// <summary>
    /// Defines the parameters for the GatherContextCommand. It contains a list
    /// of specific data requests the LLM wants to be fulfilled.
    /// </summary>
    [System.Serializable]
    public class GatherContextParams
    {
        public List<ContextRequest> requests = new();
    }

    /// <summary>
    /// Represents a single, specific request for a piece of information about the project.
    /// </summary>
    [System.Serializable]
    public class ContextRequest
    {
        /// <summary>
        /// A key provided by the LLM to uniquely identify this piece of data in the final response dictionary.
        /// e.g., "launcherRigidbody"
        /// </summary>
        public string contextKey;

        /// <summary>
        /// The identifier for the object of interest. This can be an InstanceID, a GUID, an asset path, or a name.
        /// e.g., "18354", "a1b2c3d4e5f6", "Assets/Scripts/Player.cs"
        /// </summary>
        public string subjectIdentifier;

        /// <summary>
        /// The type of data being requested. This determines which Context Provider will be used.
        /// e.g., "ComponentData", "SourceCode", "ProjectSettings"
        /// </summary>
        public string dataType;

        /// <summary>
        /// An optional qualifier to provide more specific instructions to the data provider.
        /// e.g., "UnityEngine.Rigidbody", "Physics", "t:Prefab player"
        /// </summary>
        public JToken qualifier;
    }
}