import { AssertionResult } from '@jest/test-result';
import { bold, grey } from 'chalk';

import { formatResult } from './utils';

const recursiveLogger = (
  prevTitle: string,
  testResults: AssertionResult[],
  resultsIndex: number,
  titlesIndex: number,
): void => {
  const testResult = testResults[resultsIndex];

  if (!testResult) {
    return;
  }

  const { ancestorTitles, status, title } = testResult;

  const currentTitle = ancestorTitles[titlesIndex];

  if (!currentTitle && ancestorTitles.length) {
    recursiveLogger(prevTitle, testResults, resultsIndex, titlesIndex - 1);

    return;
  }
  if (!currentTitle && ancestorTitles.length === 0) {
    console.log(formatResult(status, title));

    return;
  }

  if (prevTitle !== currentTitle && titlesIndex < ancestorTitles.length) {
    console.log(bold(grey(currentTitle)));
    recursiveLogger(currentTitle, testResults, resultsIndex, titlesIndex + 1);
  } else {
    console.log(formatResult(status, title));
    recursiveLogger(currentTitle, testResults, resultsIndex + 1, titlesIndex);
  }
};

export { recursiveLogger };
