#!/usr/bin/env node

/**
 * Генерация Allure-отчёта из результатов по всем стендам.
 * Объединяет прогоны feature2, feature3 и т.д. в один отчёт (Features by stories).
 */

const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

function getResultsDirs(rootPath, mode) {
  if (!fs.existsSync(rootPath)) {
    return [];
  }

  if (mode === 'release') {
    return [rootPath];
  }

  return fs.readdirSync(rootPath, { withFileTypes: true })
    .filter((d) => d.isDirectory())
    .map((d) => path.join(rootPath, d.name));
}

let resultsRoot;
let reportDir;
let dirs = [];

const isReleaseMode = process.env.TYPE_OF_REPORT === 'release' && process.env.FEATURE === 'dev';

if (isReleaseMode) {
  // Режим релиза - единая папка с результатами
  resultsRoot = process.env.ALLURE_RESULTS_PATH 
  ? path.resolve(process.env.ALLURE_RESULTS_PATH)
  : path.join(process.cwd(), 'allure-results-release');
  reportDir = process.env.ALLURE_REPORT_PATH
  ? path.resolve(process.env.ALLURE_REPORT_PATH)
  : path.join(process.cwd(), 'allure-report-release');
  
  // Сохраняем историю из предыдущего отчёта для трендов
  const historySrc = path.join(reportDir, 'history');
  const historyDst = path.join(resultsRoot, 'history');
  
  if (fs.existsSync(historySrc)) {
    fs.mkdirSync(resultsRoot, { recursive: true });
    fs.cpSync(historySrc, historyDst, { recursive: true });
  }
  
  // Для релиза используем одну папку с результатами
  dirs = getResultsDirs(resultsRoot, 'release');
  
} else {
  // Режим тестирования - собираем все подпапки с результатами
  resultsRoot = process.env.ALLURE_RESULTS_PATH 
  ? path.resolve(process.env.ALLURE_RESULTS_PATH)
  : path.join(process.cwd(), 'allure-results-testing');
  reportDir = process.env.ALLURE_REPORT_PATH
  ? path.resolve(process.env.ALLURE_REPORT_PATH)
  : path.join(process.cwd(), 'allure-report-testing');
  
  dirs = getResultsDirs(resultsRoot, 'testing');
}

// Проверяем наличие результатов
if (!dirs || dirs.length === 0) {
  const expectedFolder = isReleaseMode ? 'allure-results-release' : 'allure-results-testing';
  console.warn(`Папка ${expectedFolder} отсутствует или пуста. Запустите тесты.`);
  process.exit(1);
}

// Генерируем отчёт
const args = ['allure', 'generate', ...dirs, '-o', reportDir, '--clean'];
execSync('npx ' + args.map((a) => (a.includes(' ') ? `"${a}"` : a)).join(' '), {
  stdio: 'inherit',
  shell: true,
});

console.log(`Allure report generated: ${reportDir}`);
