// 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 VisionAgentProvider(IConfiguration configuration) : AgentProvider(configuration)
{
    protected override async IAsyncEnumerable<ProjectsAgentVersion> CreateAgentsAsync(Uri foundryEndpoint)
    {
        AIProjectClient aiProjectClient = new(foundryEndpoint, TestAzureCliCredentials.CreateAzureCliCredential());

        yield return
            await aiProjectClient.CreateAgentAsync(
                agentName: "VisionAgent",
                agentDefinition: this.DefineVisionAgent(),
                agentDescription: "Use computer vision to describe an image or document.");
    }

    private DeclarativeAgentDefinition DefineVisionAgent() =>
        new(this.GetSetting(TestSettings.AzureAIModelDeploymentName))
        {
            Instructions =
                """
                Describe the image or document contained in the user request, if any;
                otherwise, suggest that the user provide an image or document.
                """,
        };
}
