const glob = require('glob');

// Those specs paths are glob patterns
const groups = [
  {
    specs: [
      'cypress/integration/create-project/**/*.spec.js',
      'cypress/integration/extensions/**/*.spec.js',
      'cypress/integration/import-project/**/*.spec.js',
      'cypress/integration/language/**/*.spec.js',
      'cypress/integration/open-project/**/*.spec.js',
      'cypress/integration/preferences/**/*.spec.js',
      'cypress/integration/project_management/**/*.spec.js',
    ],
  },
  {
    specs: [
      'cypress/integration/project/grid/all-column/**/*.spec.js',
      'cypress/integration/project/grid/column/*.spec.js',
      'cypress/integration/project/grid/column/edit-cells/**/*.spec.js',
    ],
  },
  {
    specs: [
      'cypress/integration/project/grid/column/edit-column/**/*.spec.js',
      'cypress/integration/project/grid/column/facet/**/*.spec.js',
    ],
  },
  {
    specs: [
      'cypress/integration/project/grid/column/transpose/**/*.spec.js',
      'cypress/integration/project/grid/column/view/**/*.spec.js',
    ],
  },
  {
    specs: [
      'cypress/integration/project/grid/misc/**/*.spec.js',
      'cypress/integration/project/grid/row/**/*.spec.js',
      'cypress/integration/project/grid/viewpanel-header/**/*.spec.js',
    ],
  },
  {
    specs: [
      'cypress/integration/project/project-header/**/*.spec.js',
      'cypress/integration/project/undo_redo/**/*.spec.js',
      'cypress/integration/tutorial/*.spec.js',
    ],
  },
];

const mergedGroups = groups.map((group) => group.specs.join(','));

// step1 ,find files matched by existing groups
const matchedFiles = [];
groups.forEach((group) => {
  group.specs.forEach((pattern) => {
    const files = glob.sync(`main/tests/cypress/${pattern}`);
    matchedFiles.push(...files);
  });
});

// step2 , add a last group that contains missed files
const allSpecFiles = glob.sync(
  `./main/tests/cypress/cypress/integration/**/*.spec.js`
);
const missedFiles = [];

for (const file of allSpecFiles) {
  const relativeFile = file.substring('./main/tests/cypress/'.length);
  if (!matchedFiles.includes(file.substring(2))) {
    missedFiles.push(relativeFile);
  }
}

if (missedFiles.length) {
  mergedGroups.push(missedFiles.join(','));
}

const browsers = process.env.browsers.split(',');
console.log(
  `::set-output name=matrix::{"browser":${JSON.stringify(
    browsers
  )}, "specs":${JSON.stringify(mergedGroups)}}`
);