using System;

using AIRuntime.Runtime.Agents;

using NUnit.Framework;


namespace AIRuntime.Tests
{
    public sealed class AgentProfileTests
    {
        [Test]
        public void Profile_CreatesWithAgentId()
        {
            AgentProfile profile =
                new AgentProfile(
                    "ArchitectAgent");


            Assert.AreEqual(
                "ArchitectAgent",
                profile.AgentId);
        }



        [Test]
        public void EmptyAgentId_Throws()
        {
            Assert.Throws<ArgumentException>(
                () =>
                {
                    new AgentProfile(
                        "");
                });
        }



        [Test]
        public void PreferredProvider_IsAdded()
        {
            AgentProfile profile =
                new AgentProfile(
                    "DeveloperAgent");


            profile.AddPreferredProvider(
                "Ollama");


            Assert.AreEqual(
                1,
                profile.PreferredProviders.Count);


            Assert.AreEqual(
                "Ollama",
                profile.PreferredProviders[0]);
        }



        [Test]
        public void DuplicateProviders_AreIgnored()
        {
            AgentProfile profile =
                new AgentProfile(
                    "DeveloperAgent");


            profile.AddPreferredProvider(
                "Ollama");


            profile.AddPreferredProvider(
                "Ollama");


            Assert.AreEqual(
                1,
                profile.PreferredProviders.Count);
        }



        [Test]
        public void RemoveProvider_RemovesExisting()
        {
            AgentProfile profile =
                new AgentProfile(
                    "DeveloperAgent");


            profile.AddPreferredProvider(
                "NVIDIA");


            profile.RemovePreferredProvider(
                "NVIDIA");


            Assert.AreEqual(
                0,
                profile.PreferredProviders.Count);
        }



        [Test]
        public void DefaultModelSettings_AreApplied()
        {
            AgentProfile profile =
                new AgentProfile(
                    "TesterAgent");


            Assert.AreEqual(
                0.2,
                profile.Temperature);


            Assert.AreEqual(
                0,
                profile.MaxTokens);
        }



        [Test]
        public void ModelSettings_CanBeChanged()
        {
            AgentProfile profile =
                new AgentProfile(
                    "DeveloperAgent");


            profile.Temperature =
                0.7;


            profile.MaxTokens =
                8192;


            Assert.AreEqual(
                0.7,
                profile.Temperature);


            Assert.AreEqual(
                8192,
                profile.MaxTokens);
        }
    }
}
