using System.Collections.Generic;

namespace LLM.Editor.Data
{
    /// <summary>
    /// The root object for the structured context manifest sent to the LLM.
    /// It contains a list of all assets the user has staged.
    /// </summary>
    [System.Serializable]
    public class StagedContextManifest
    {
        public List<StagedContextItem> stagedContext = new();
    }

    /// <summary>
    /// Represents a single item (GameObject, script, asset) staged by the user.
    /// It provides a stable identifier that the LLM can use to ask for more details.
    /// </summary>
    [System.Serializable]
    public class StagedContextItem
    {
        /// <summary>
        /// A stable, session-unique identifier for this asset.
        /// (e.g., Instance ID for scene objects, GUID for project assets).
        /// </summary>
        public string contextId;

        /// <summary>
        /// The name of the asset (e.g., "GrenadeLauncher", "Player.cs").
        /// </summary>
        public string name;

        /// <summary>
        /// The fully qualified type name of the asset (e.g., "UnityEngine.GameObject").
        /// </summary>
        public string assetType;

        /// <summary>
        /// If the asset is a GameObject, this lists the names of its components.
        /// </summary>
        public List<string> components;
    }
}