#!/usr/bin/env php
<?php

use PhpCliTools\Console;
use PhpCliTools\RunnerValidator;
use PhpCliTools\Factory;

$autoloadCandidates = [
  __DIR__ . '/../../../autoload.php',
  __DIR__ . '/../vendor/autoload.php',
];
$autoloadFound = false;
foreach ($autoloadCandidates as $autoload) {
  if (is_readable($autoload)) {
    include $autoload;
    $autoloadFound = true;
    Console::log("Using autoload: {$autoload}\n");
    break;
  }
}
if (!$autoloadFound) {
  throw new Exception('Unable to find autoload.php');
}

function main($config) {
  $specificTasks = $config->hasSpecificTasks() ? $config->getTasks() : null;
  foreach ($config->getData() as $groupId => $tasks) {
    if ($specificTasks !== null && !in_array($groupId, $specificTasks)) {
      continue;
    }
    foreach ($tasks as $task) {
      $runnerId = RunnerValidator::extractRunnerId($task);
      if (!$runnerId) {
        throw new Exception("Missing or invalid runner ID in task {$groupId}");
      }
      $runner = Factory::makeRunner($runnerId);
      if (!$runner) {
        throw new Exception("Failed to create a runner from id: {$runnerId}");
      }
      Console::warning("Run: {$groupId} > {$runnerId}");
      $runner->withConfig($task)->run();
    }
  }
}

main(Factory::makeConfig($argv));
