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

use CatPaw\Attributes\Option;
use CatPaw\Bootstrap;
$_ENV = [
    ...$_ENV,
    ...getenv(),
];
require 'vendor/autoload.php';


$entry       = new Option('--entry');
$name        = new Option('--name');
$libraries   = new Option('--libraries');
$resources   = new Option('--resources');
$dieOnChange = new Option('--die-on-change');
$watch       = new Option('--watch');
$php         = new Option('--php');
$info        = new Option('--info');

$entry       = $entry->findValue('string', true)     ?? '';
$name        = $name->findValue('string', true)      ?? 'App';
$libraries   = $libraries->findValue('string', true) ?? '';
$resources   = $resources->findValue('string', true) ?? '';
$dieOnChange = $dieOnChange->findValue('bool')       ?? false;
$watch       = $watch->findValue('bool')             ?? false;
$php         = $php->findValue('string', true)       ?? 'php';
$info        = $info->findValue('bool')              ?? false;

try {
    if ($watch) {
        $arguments   = array_filter(array_slice($argv, 1), fn ($option) => trim($option) !== '--watch');
        $arguments[] = '--die-on-change';
        Bootstrap::spawn(
            binary: $php,
            fileName: __FILE__,
            arguments: $arguments,
            entry: $entry,
            libraries: $libraries,
            resources: $resources,
        );
    } else {
        Bootstrap::start(
            entry: $entry,
            name: $name,
            libraries: $libraries,
            info: $info,
            dieOnChange: $dieOnChange,
            resources: $resources,
        );
    }
} catch (Throwable $e) {
    die(((string)$e).PHP_EOL);
}
