using System;


namespace AIRuntime.Runtime.Capabilities.Permissions
{
    /// <summary>
    /// Describes a capability execution that requires
    /// explicit approval before it may continue.
    /// </summary>
    public sealed class CapabilityApprovalRequest
    {
        /// <summary>
        /// Unique name of the capability requesting approval.
        /// </summary>
        public string CapabilityName
        {
            get;
        }


        /// <summary>
        /// Permission category required by the capability.
        /// </summary>
        public CapabilityPermission Permission
        {
            get;
        }


        /// <summary>
        /// Raw JSON arguments supplied to the capability.
        /// </summary>
        public string Arguments
        {
            get;
        }


        /// <summary>
        /// Identifier of the agent run that requested approval.
        ///
        /// This may be empty for direct capability execution.
        /// </summary>
        public string SessionId
        {
            get;
        }


        public CapabilityApprovalRequest(
            string capabilityName,
            CapabilityPermission permission,
            string arguments,
            string sessionId)
        {
            if (string.IsNullOrWhiteSpace(capabilityName))
            {
                throw new ArgumentException(
                    "Capability name cannot be empty.",
                    nameof(capabilityName));
            }


            CapabilityName =
                capabilityName;


            Permission =
                permission;


            Arguments =
                arguments ??
                string.Empty;


            SessionId =
                sessionId ??
                string.Empty;
        }
    }
}