using System; using System.Threading; using System.Threading.Tasks; using GB5Shared.GOP.Qualifier; using GB5Shared.GOP.Qualifier.DTOs; using GB5Shared.DTO.Framework.Login; namespace GB5Shared.GOP.Qualifier { public class QualifierEngineBLL : IQualifierEngineBLL { private readonly IQualifierDAL _QualifierDAL; public QualifierEngineBLL(IQualifierDAL qualifierDAL) { _QualifierDAL = qualifierDAL; } public async Task RunQualifiersAsync( string payloadJson, string entityCode, byte stage, byte scope, LoginDTO loginDTO, CancellationToken ct = default) { if (string.IsNullOrWhiteSpace(payloadJson)) throw new ArgumentException("Payload is required."); var bindings = await _QualifierDAL .GetEntityBindings(entityCode, stage, scope, loginDTO, ct) .ConfigureAwait(false); string currentPayload = payloadJson; foreach (var binding in bindings) { var version = await _QualifierDAL .GetActiveQualifierPlan(binding.QualifierId, loginDTO, ct) .ConfigureAwait(false); if (version == null) continue; currentPayload = EvaluateQualifier(currentPayload, version); } return currentPayload; } /// /// Integration point for qualifier script evaluation. /// In production, plug in Roslyn or a JS engine to execute version.SnapshotJson against the payload. /// private static string EvaluateQualifier(string payloadJson, QualifierVersionDTO version) { // Placeholder: real implementation executes version.SnapshotJson against payloadJson. // Validators return bool; Enrichers return modified JSON. return payloadJson; } } }