// Turn off timezone warning
date_default_timezone_set(@date_default_timezone_get());
// Require dependencies
$script_dir = dirname(dirname(__FILE__));
require_once "{$script_dir}/code/lib/bedrock/Bedrock.php";
require_once "{$script_dir}/code/SilverSmithNode.php";
require_once "{$script_dir}/code/BedrockDataRecord.php";
foreach (glob("{$script_dir}/code/*.php") as $class) {
    require_once $class;
}
require_once "{$script_dir}/code/lib/thirdparty/TextDiff.php";
// Bootstrap the SilverSmith class
SilverSmith::set_cli(true);
SilverSmith::set_script_dir($script_dir);
SilverSmith::set_git_path(trim(shell_exec("which git")));
SilverSmithDefaults::load(SilverSmith::get_script_dir() . "/code/lib/_defaults.yml");
SilverSmithSpec::load(SilverSmith::get_script_dir() . "/code/lib/_spec.yml");
// Validation for the CLI commands
$commands = new BedrockYAML(SilverSmith::get_script_dir() . "/code/lib/_cli.yml");
$allowed_actions = $commands->getAllowedActions();
$PARAMS = SilverSmithUtil::parse_parameters();
if (!isset($PARAMS[1])) {
    fail("Usage: silversmith <command> [-args]. Type 'silversmith help' for more information.");
}
$action = $PARAMS[1];
if (!$allowed_actions->get($action)) {
    say(error("'{$action}' is not an allowed command."));
    say("Available commands:\n " . implode("\n", array_keys($allowed_actions->toArray())));
    die;
}
$allowed_options = $allowed_actions->get($action)->getOptions();