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

use wapmorgan\UnifiedArchive\Commands\AddFileCommand;
use wapmorgan\UnifiedArchive\Commands\CommentCommand;
use wapmorgan\UnifiedArchive\Commands\CreateCommand;
use wapmorgan\UnifiedArchive\Commands\DeleteFileCommand;
use wapmorgan\UnifiedArchive\Commands\DetailsCommand;
use wapmorgan\UnifiedArchive\Commands\DriversCommand;
use wapmorgan\UnifiedArchive\Commands\ExtractArchiveCommand;
use wapmorgan\UnifiedArchive\Commands\ExtractFileCommand;
use wapmorgan\UnifiedArchive\Commands\ExtractFilesCommand;
use wapmorgan\UnifiedArchive\Commands\FoldersCommand;
use wapmorgan\UnifiedArchive\Commands\FormatCommand;
use wapmorgan\UnifiedArchive\Commands\FormatsCommand;
use wapmorgan\UnifiedArchive\Commands\InfoCommand;
use wapmorgan\UnifiedArchive\Commands\ListCommand;
use wapmorgan\UnifiedArchive\Commands\PrintCommand;
use wapmorgan\UnifiedArchive\Commands\TableCommand;
use wapmorgan\UnifiedArchive\Commands\TestCommand;
use wapmorgan\UnifiedArchive\Commands\TypesCommand;
use wapmorgan\UnifiedArchive\UnifiedArchive;

$paths = [
	// as a root package or phar
	__DIR__.'/../vendor/autoload.php',
	// as a dependency from bin
	__DIR__.'/../autoload.php',
	// as a dependency from package folder
	__DIR__.'/../../../autoload.php',
	];
function init_composer(array $paths) {
	foreach ($paths as $path) {
		if (file_exists($path)) {
			require_once $path;
			return true;
		}
	}
	return false;
}
if (!init_composer($paths)) die('Run `composer install` firstly.'.PHP_EOL);
if (!class_exists('\Symfony\Component\Console\Application')) {
    echo 'Run `composer require symfony/console` firstly.'.PHP_EOL;
    exit(1);
}

$application = new \Symfony\Component\Console\Application('Universal console archive manager for Windows/Linux (part of UnifiedArchive)', UnifiedArchive::VERSION);

$application->add(new DriversCommand());
$application->add(new FormatsCommand());
$application->add(new FormatCommand());

$application->add(new CreateCommand());

$application->add(new InfoCommand());
$application->add(new CommentCommand());
$application->add(new ExtractArchiveCommand());

$application->add(new ExtractFilesCommand());
$application->add(new ListCommand());
$application->add(new TableCommand());
$application->add(new TypesCommand());
$application->add(new FoldersCommand());
$application->add(new TestCommand());

$application->add(new AddFileCommand());
$application->add(new DeleteFileCommand());
$application->add(new DetailsCommand());
$application->add(new ExtractFileCommand());
$application->add(new PrintCommand());

$application->run();
