using AIRuntime.Runtime.Agents;

using NUnit.Framework;


namespace AIRuntime.Tests
{
    public sealed class AgentCapabilityBindingTests
    {
        [Test]
        public void Agent_WithCapability_CanUseCapability()
        {
            AgentDefinition agent =
                CreateAgent();


            agent.AddCapability(
                "read_file");


            bool allowed =
                agent.CanUseCapability(
                    "read_file");


            Assert.IsTrue(
                allowed);
        }



        [Test]
        public void Agent_WithoutCapability_IsBlocked()
        {
            AgentDefinition agent =
                CreateAgent();


            bool allowed =
                agent.CanUseCapability(
                    "delete_file");


            Assert.IsFalse(
                allowed);
        }



        [Test]
        public void Agent_CapabilitiesAreReturned()
        {
            AgentDefinition agent =
                CreateAgent();


            agent.AddCapability(
                "read_file");


            agent.AddCapability(
                "write_file");


            var capabilities =
                agent.Capabilities;


            Assert.AreEqual(
                2,
                capabilities.Count);


            CollectionAssert.Contains(
                capabilities,
                "read_file");


            CollectionAssert.Contains(
                capabilities,
                "write_file");
        }



        [Test]
        public void DifferentAgentsHaveDifferentCapabilities()
        {
            AgentDefinition reader =
                new AgentDefinition(
                    "Reader",
                    "Reader",
                    "",
                    "");


            AgentDefinition writer =
                new AgentDefinition(
                    "Writer",
                    "Writer",
                    "",
                    "");


            reader.AddCapability(
                "read_file");


            writer.AddCapability(
                "write_file");


            Assert.IsTrue(
                reader.CanUseCapability(
                    "read_file"));


            Assert.IsFalse(
                reader.CanUseCapability(
                    "write_file"));


            Assert.IsTrue(
                writer.CanUseCapability(
                    "write_file"));


            Assert.IsFalse(
                writer.CanUseCapability(
                    "read_file"));
        }



        private static AgentDefinition CreateAgent()
        {
            return new AgentDefinition(
                "TestAgent",
                "Test Agent",
                "Capability test agent",
                "Test prompt");
        }
    }
}
