using System;

using AIRuntime.Runtime.Agents.Permissions;


namespace AIRuntime.Runtime.Services.Agent
{
    /// <summary>
    /// Tracks one agent execution session.
    ///
    /// Created when a conversation run begins.
    /// Stores runtime statistics, metadata, and execution policy.
    /// </summary>
    public sealed class AgentRunContext
    {
        public string SessionId
        {
            get;
        }


        public DateTime StartedAt
        {
            get;
        }


        public DateTime? CompletedAt
        {
            get;
            private set;
        }


        public int ToolCallsExecuted
        {
            get;
            private set;
        }


        /// <summary>
        /// Capability permissions active during this run.
        ///
        /// This is copied from the agent definition and
        /// controls what this execution may access.
        /// </summary>
        public CapabilityAccessPolicy CapabilityPolicy
        {
            get;
            internal set;
        }


        public TimeSpan Duration
        {
            get
            {
                DateTime end =
                    CompletedAt ??
                    DateTime.UtcNow;

                return end - StartedAt;
            }
        }


        public AgentRunContext()
        {
            SessionId =
                Guid.NewGuid()
                    .ToString();


            StartedAt =
                DateTime.UtcNow;


            CapabilityPolicy =
                new CapabilityAccessPolicy();
        }


        public void RecordToolCall()
        {
            ToolCallsExecuted++;
        }


        public void Complete()
        {
            if (CompletedAt.HasValue)
                return;


            CompletedAt =
                DateTime.UtcNow;
        }
    }
}
