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

use CasaHugo\Secrets\{
    Command\SecretsDecryptToLocalCommand,
    Command\SecretsEncryptFromLocalCommand,
    Command\SecretsGenerateKeysCommand,
    Command\SecretsListCommand,
    Command\SecretsRemoveCommand,
    Command\SecretsSetCommand,
    DotenvVault,
    SodiumVault
};
use Symfony\Component\Console\Application;

set_time_limit(0);

foreach ([__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php'] as $file) {
    if (file_exists($file)) {
        require $file;
        break;
    }
}

$rootDirectory = null;
foreach ([__DIR__ . '/../..', __DIR__ . '/..', __DIR__ ] as $root) {
    if (file_exists($file.'/composer.json')) {
        $rootDirectory = $root;
        break;
    }
}

$application = new Application();

$directory = getopt('', ['dir:'])['dir'] ?? null;

if (false === is_string($directory)) {
    echo "Argument --dir is missing" . PHP_EOL;
    exit;
}

$env = $_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'dev';

$vault = new SodiumVault(rtrim($directory, '/')."/$env");
$localVault = new DotenvVault("$rootDirectory/.env.$env.local");

$application->addCommands([
    new SecretsDecryptToLocalCommand($vault, $localVault),
    new SecretsEncryptFromLocalCommand($vault, $localVault),
    new SecretsGenerateKeysCommand($vault, $localVault),
    new SecretsListCommand($vault, $localVault),
    new SecretsSetCommand($vault, $localVault),
    new SecretsRemoveCommand($vault, $localVault)
]);

try {
    $application->run();
} catch (Throwable $exception) {
    echo $exception->getMessage();
}

