using UnityEngine;

namespace AIRuntime.Runtime.Services.Agent
{
    /// <summary>
    /// Basic Unity console observer.
    /// Useful during development.
    /// </summary>
    public sealed class ConsoleAgentObserver :
        IAgentObserver
    {
        private const int MaximumLoggedMessageCharacters =
            4096;


        /// <summary>Opt in to routine tool payloads; activity observers still receive every event.</summary>
        public bool Verbose { get; set; }

        public void OnAgentEvent(
            AgentEvent agentEvent)
        {
            if (agentEvent == null) return;
            if (!Verbose && (agentEvent.Type == AgentEventType.ToolStarted ||
                agentEvent.Type == AgentEventType.ToolCompleted ||
                agentEvent.Type == AgentEventType.ModelResponseNormalized)) return;

            string message =
                $"[Agent] {agentEvent.Type}";


            if (!string.IsNullOrWhiteSpace(
                    agentEvent.ToolName))
            {
                message +=
                    $" Tool={agentEvent.ToolName}";
            }


            if (!string.IsNullOrWhiteSpace(
                    agentEvent.Message))
            {
                message +=
                    $" {BoundMessageForConsole(agentEvent.Message)}";
            }


            Debug.Log(message);
        }


        internal static string BoundMessageForConsole(
            string value)
        {
            string message = value ?? string.Empty;

            if (message.Length <= MaximumLoggedMessageCharacters)
                return message;

            const int suffixCharacters = 768;
            int prefixCharacters =
                MaximumLoggedMessageCharacters -
                suffixCharacters -
                128;

            return message.Substring(0, prefixCharacters) +
                   $"\n...[AIRuntime console result bounded; original characters={message.Length}]...\n" +
                   message.Substring(message.Length - suffixCharacters);
        }
    }
}
