/**
 * Copyright IBM Corp. 2024, 2025
 */
import { TestManagerInterface } from '../models/interface.js';
import { TestRunner } from '../engine/execution/test-runner.js';
import { ZipTestModelTransformer } from '../transformers/zip-models.transformer.js';
import { fetchTraceAndCatalogData, fetchCaptureId } from '../helpers/trace-helper.js';
export class TestManager implements TestManagerInterface {
  async processFile(buffer: Buffer) {
    const zipModel = new ZipTestModelTransformer();
    const model = await zipModel.transform(buffer);
    const tests = model.getAllTests();
    const runs = tests.map(async (test: any) => new TestRunner(test).run());
    const promisedSummaries = await Promise.allSettled(runs);
    const summaries = [];
    for (const summary of promisedSummaries) {
      if (summary.status === 'fulfilled') {
        summaries.push(summary.value);
      }
    }
    return summaries;
  }

  /**
   * Process trace data from a request
   * @param traceReq - The request containing trace data
   * @returns Processed trace data
   */
  async processTrace(reqbody: any, reqHeader: any): Promise<any | null> {
    return await fetchTraceAndCatalogData(reqbody, reqHeader)
  }

  async getCaptureId(reqbody: any, reqHeader: any): Promise<any | null> {
    return await fetchCaptureId(reqbody, reqHeader)
  }
}
