// Copyright (c) Microsoft. All rights reserved.

using System;
using System.Collections.Generic;
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Microsoft.Extensions.Configuration;
using Shared.Foundry;
using Shared.IntegrationTests;

namespace Microsoft.Agents.AI.Workflows.Declarative.IntegrationTests.Agents;

internal sealed class PoemAgentProvider(IConfiguration configuration) : AgentProvider(configuration)
{
    protected override async IAsyncEnumerable<ProjectsAgentVersion> CreateAgentsAsync(Uri foundryEndpoint)
    {
        AIProjectClient aiProjectClient = new(foundryEndpoint, TestAzureCliCredentials.CreateAzureCliCredential());

        yield return
            await aiProjectClient.CreateAgentAsync(
                agentName: "PoemAgent",
                agentDefinition: this.DefinePoemAgent(),
                agentDescription: "Authors original poems");
    }

    private DeclarativeAgentDefinition DefinePoemAgent() =>
        new(this.GetSetting(TestSettings.AzureAIModelDeploymentName))
        {
            Instructions =
                """
                Write a one verse poem on the requested topic in the style of: {{style}}.            
                """,
            StructuredInputs =
            {
                ["style"] =
                    new StructuredInputDefinition
                    {
                        IsRequired = false,
                        DefaultValue = BinaryData.FromString(@"""haiku"""),
                        Description = "The style of poem to write",
                    }
            }
        };
}
