using GB5Shared.DTO.Framework.Login; using GB5Shared.ExternalAI; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace EAIAdminBLL.Sync { public class EAIExecutionSyncClient : IEAIExecutionSyncClient { private const string SectionName = "EAIAdmin:AIExtract"; private readonly IAIEngineSyncClient _transport; private readonly AIEngineOptions _options; public EAIExecutionSyncClient(IAIEngineSyncClient transport, IConfiguration configuration) { _transport = transport ?? throw new ArgumentNullException(nameof(transport)); // Same section/defaults EAISyncClient resolves — one physical gbEAI link per // PlatformHost process, shared by config-push and live-execution calls alike. _options = configuration.GetSection(SectionName).Get() ?? new AIEngineOptions(); if (string.IsNullOrWhiteSpace(_options.SigningKeyVaultPath)) _options.SigningKeyVaultPath = "eaiadmin/ai-enterprise-jwt-secret"; if (string.IsNullOrWhiteSpace(_options.Issuer)) _options.Issuer = "GB5-EAIAdmin"; } public Task ExecuteAgentAsync( string agentSlug, IReadOnlyDictionary formFields, LoginDTO login, (string FileName, byte[] Bytes)? file = null, CancellationToken ct = default) => _transport.SendMultipartAsync(_options, $"/{agentSlug}", formFields, file, login, ct); } }