#!/usr/bin/env node

'use strict';

const {join} = require('path');
const puppeteer = require('puppeteer');
const theme = require('../theme');
const {logPromise} = require('../utils');

const validate = async ({cwd}) => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto(
    'file://' + join(cwd, 'fixtures/tracing/index.html?puppeteer=true')
  );

  try {
    return await page.evaluate(() => {
      const button = document.getElementById('run-test-button');
      button.click();

      const items = document.querySelectorAll('[data-value]');

      if (items.length === 0) {
        return 'No results were found.';
      }

      for (let i = 0; i < items.length; i++) {
        const item = items[i];
        if (item.getAttribute('data-value') !== 'All checks pass') {
          return `Unexpected result, "${item.getAttribute('data-value')}"`;
        }
      }

      return null;
    });
  } finally {
    await browser.close();
  }
};

const run = async ({cwd}) => {
  const errorMessage = await logPromise(
    validate({cwd}),
    'Verifying "scheduler/tracing" fixture'
  );
  if (errorMessage) {
    console.error(
      theme.error('✗'),
      'Verifying "scheduler/tracing" fixture\n ',
      theme.error(errorMessage)
    );
    process.exit(1);
  }
};

module.exports = run;
