#!/usr/bin/env php
<?php
/**
 * Created by PhpStorm.
 * User: AmorPro
 * Date: 14.08.2021
 * Time: 23:36
 */

error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

// Load composer autoload
$autoloadPaths = [
    __DIR__ . '/../../../autoload.php',
    __DIR__ . '/../../autoload.php',
    __DIR__ . '/../vendor/autoload.php',
    __DIR__ . '/vendor/autoload.php',
];

foreach ($autoloadPaths as $file) {
    if (file_exists($file)) {
        define('SMOKE_TESTS_CALLED_PROJECT_AUTOLOAD_PATH', $file);
        break;
    }
}

if (!defined('SMOKE_TESTS_CALLED_PROJECT_AUTOLOAD_PATH')) {
    die('Enable to find the autoload path');
}

require_once SMOKE_TESTS_CALLED_PROJECT_AUTOLOAD_PATH;



// Defile global paths constants
define('SMOKE_TESTS_CALLED_PROJECT_PATH', realpath(dirname(SMOKE_TESTS_CALLED_PROJECT_AUTOLOAD_PATH) . '/../'));
define('SMOKE_TESTS_CALLED_PROJECT_TESTS_ROOT_DIR', SMOKE_TESTS_CALLED_PROJECT_PATH . '/smoke-tests');
define('SMOKE_TESTS_CALLED_PROJECT_TESTS_TESTS_DIR', SMOKE_TESTS_CALLED_PROJECT_TESTS_ROOT_DIR . '/tests');
define('SMOKE_TESTS_CALLED_PROJECT_CONFIG_FILE', SMOKE_TESTS_CALLED_PROJECT_TESTS_ROOT_DIR . '/config.php');

define('SMOKE_TESTS_TEMPLATES_DIR', dirname(__DIR__) . '/templates');
define('SMOKE_TESTS_TEMPLATES_CONFIG', SMOKE_TESTS_TEMPLATES_DIR . '/config');






// Prepare smoke tests directory
$testsDir = SMOKE_TESTS_CALLED_PROJECT_TESTS_ROOT_DIR;
if(!is_dir($testsDir)) {
    if (!mkdir($testsDir, 0777, true) && !is_dir($testsDir)) {
        cli\err(sprintf('Directory "%s" was not created', $testsDir));
        die();
    }

    foreach (
        $iterator = new \RecursiveIteratorIterator(
            new \RecursiveDirectoryIterator(SMOKE_TESTS_TEMPLATES_DIR, \RecursiveDirectoryIterator::SKIP_DOTS),
            \RecursiveIteratorIterator::SELF_FIRST
        ) as $item
    ) {
        $path = $testsDir . DIRECTORY_SEPARATOR . $iterator->getSubPathname();
        if ($item->isDir()) {
            if (!mkdir($path) && !is_dir($path)) {
                cli\err(sprintf('Directory "%s" was not created', $path));
                die();
            }
        } else {
            if (!copy($item, $path)) {
                cli\err(sprintf('File "%s" was not created', $path));
                die();
            }
        }
    }
}



// Load configs
$configs = require SMOKE_TESTS_CALLED_PROJECT_CONFIG_FILE;
if(!is_array($configs) || !count($configs)){
    cli\line( sprintf('%s format error, see %s.', SMOKE_TESTS_CALLED_PROJECT_CONFIG_FILE, SMOKE_TESTS_TEMPLATES_CONFIG));
}

// Load input arguments
$testsFilter = $_SERVER['argv'][1];


(new \SmokeTests\Runner())->run($testsDir, $configs, $testsFilter);

