#!/usr/bin/env php
<?php 
namespace Matomo\Dependencies;

require_once __DIR__ . '/../lib/Less/Autoloader.php';
Less_Autoloader::register();
// Create our environment
$env = array('compress' => \false, 'relativeUrls' => \false);
$silent = \false;
$watch = \false;
$rootpath = '';
// Check for arguments
\array_shift($argv);
if (!\count($argv)) {
    $argv[] = '-h';
}
// parse arguments
foreach ($argv as $key => $arg) {
    if (\preg_match('/^--?([a-z][0-9a-z-]*)(?:=([^\\s]+))?$/i', $arg, $matches)) {
        $option = $matches[1];
        $value = isset($matches[2]) ? $matches[2] : \false;
        unset($argv[$key]);
        switch ($option) {
            case 'h':
            case 'help':
                echo <<<EOD
Usage: lessc [options] sources [destination]

 -h, --help            Print help (this message) and exit.
 -s, --silent          Suppress output of error messages.
 -v, --version         Print version number and exit.
 -x, --compress        Compress output by removing some whitespaces.
 --include-path=PATHS  Set include paths. Separated by `:'. Use `;' on Windows.
 --strict-imports      Force evaluation of imports.
 -sm=on|off            Turn on or off strict math, where in strict mode, math
 --strict-math=on|off  requires brackets. This option may default to on and then
                       be removed in the future.
 -su=on|off            Allow mixed units, e.g. 1px+1em or 1px*1px which have units
 --strict-units=on|off that cannot be represented.
 -ru, --relative-urls  re-write relative urls to the base less file.
 -rp, --rootpath=URL   Set rootpath for url rewriting in relative imports and urls.
                       Works with or without the relative-urls option.
 -w, --watch           Watch input files for changes.


EOD;
                exit;
            case 's':
            case 'silent':
                $silent = \true;
                break;
            case 'w':
            case 'watch':
                $watch = \true;
                break;
            case 'v':
            case 'version':
                echo "lessc " . Less_Version::version . " (less.php)\n\n";
                exit;
            case 'rp':
            case 'rootpath':
                $rootpath = $value;
                break;
            //parser options
            case 'compress':
                $env['compress'] = \true;
                break;
            case 'ru':
            case 'relative-urls':
                $env['relativeUrls'] = \true;
                break;
            case 'su':
            case 'strict-units':
                $env['strictUnits'] = $value === 'on';
                break;
            case 'sm':
            case 'strict-math':
                $env['strictMath'] = $value === 'on';
                break;
            case 'x':
            case 'include-path':
                $env['import_dirs'] = \preg_split('#;|\\:#', $value);
                break;
        }
    }
}
if (\count($argv) > 1) {
    $output = \array_pop($argv);
    $inputs = $argv;
} else {
    $inputs = $argv;
    $output = \false;
}
if (!\count($inputs)) {
    echo "lessc: no input files\n";
    exit;
}
if ($watch) {
    if (!$output) {
        echo "lessc: you must specify the output file if --watch is given\n";
        exit;
    }
    $lastAction = 0;
    echo "lessc: watching input files\n";
    while (1) {
        \clearstatcache();
        $updated = \false;
        foreach ($inputs as $input) {
            if ($input == '-') {
                if (\count($inputs) == 1) {
                    echo "lessc: during watching files is not possible to watch stdin\n";
                    exit;
                } else {
                    continue;
                }
            }
            if (\filemtime($input) > $lastAction) {
                $updated = \true;
                break;
            }
        }
        if ($updated) {
            $lastAction = \time();
            $parser = new Less_Parser($env);
            foreach ($inputs as $input) {
                try {
                    $parser->parseFile($input, $rootpath);
                } catch (\Exception $e) {
                    echo "lessc: " . $e->getMessage() . " \n";
                    continue;
                    // Invalid processing
                }
            }
            \file_put_contents($output, $parser->getCss());
            echo "lessc: output file recompiled\n";
        }
        \sleep(1);
    }
} else {
    $parser = new Less_Parser($env);
    foreach ($inputs as $input) {
        if ($input == '-') {
            $content = \file_get_contents('php://stdin');
            $parser->parse($content);
        } else {
            try {
                $parser->parseFile($input);
            } catch (\Exception $e) {
                if (!$silent) {
                    echo "lessc: " . (string) $e . " \n";
                }
            }
        }
    }
    if ($output) {
        \file_put_contents($output, $parser->getCss());
    } else {
        echo $parser->getCss();
    }
}
