#!/usr/bin/php
<?php
// @codingStandardsIgnoreFile

require_once('/usr/local/opmon/etc/config.php');

use Models\Manager;

function usage()
{
    $name = basename(__FILE__, '.php');

    print 'Usage: ' . $name . ' [OPTION]' . PHP_EOL;
    print 'Try "' . $name . ' --help" for more information.' . PHP_EOL;
}

function help() {
    $name = basename(__FILE__, '.php');

    print 'Usage: ' . $name . ' [OPTION]' . PHP_EOL;
    print PHP_EOL;
    print <<<EOF
This command provides a command line interface to manage OpMon's model. Every
model's rpm must call this command to be registered during the instalation and
during the unistalation to be unregistered from OpMon.

  --check-model-json=<filename>   Validate a model's JSON file.
  -h, --help                      Show this help.
  --register=<name>               This option must be used with --model-version
                                option to register an installed model on OpMon.
  --model-version=<version>       This option must be used with --register
                                option to register an installed model on OpMon.
  --unregister=<name>             Unregister a model from OpMon.

EOF;

}

function register($modelName, $version)
{
    $manager  = new Manager();
    $manager->setModelName($modelName)
        ->setModelVersion($version)
        ->register();
}

function unregister($modelName)
{
    $manager  = new Manager();
    $manager->setModelName($modelName)
        ->unregister();
}

function checkModelJson($filename)
{
    $manager  = new Manager();
    $manager->checkModelJsonFile($filename);
}

$options = getopt("h", array(
    "help",
    "check-model-json::",
    "register::",
    "model-version::",
    "unregister::"
));

$register   = (! empty($options['register']));
$unregister = (! empty($options['unregister']));
$version    = (! empty($options['model-version']));
$help       = ((isset($options['help'])) || (isset($options['h'])));
$checkModelJson = (! empty($options['check-model-json']));

if ($help) {
    help();
    exit(0);

}

$invalidOption = (($register == $unregister) || ($register != $version));
$invalidOption = (($invalidOption) && (! $checkModelJson));

if ($invalidOption) {
    usage();
    exit(1);
}

try {
    if ($checkModelJson) {
        $filename = $options['check-model-json'];

        checkModelJson($filename);
    } elseif ($register) {
        $modelName = $options['register'];
        $version   = $options['model-version'];

        register($modelName, $version);
    } elseif ($unregister) {
        $modelName = $options['unregister'];

        unregister($modelName);
    }
} catch (Exception $e) {
    $fh = fopen('php://stderr','a');
    fwrite($fh, "[ Error ] " . $e->getMessage() . PHP_EOL);
    fclose($fh);
    exit(1);
}

exit(0);
