#!/usr/bin/env php
<?php
/**
 * SCSSPHP
 *
 * @copyright 2012-2015 Leaf Corcoran
 *
 * @license http://opensource.org/licenses/gpl-license GPL-3.0
 * @license http://opensource.org/licenses/MIT MIT
 *
 * @link http://leafo.net/scssphp
 */

error_reporting(E_ALL);

if (version_compare(PHP_VERSION, '5.3') < 0) {
    die('Requires PHP 5.3 or above');
}

require_once '/usr/share/php/Leafo/ScssPhp/autoload.php';

use Leafo\ScssPhp\Compiler;
use Leafo\ScssPhp\Parser;
use Leafo\ScssPhp\Version;

$style = null;
$loadPaths = null;
$precision = null;
$dumpTree = false;
$inputFile = null;
$changeDir = false;

function parseArgument($argument, $options) {
    if (preg_match('/^(?:' . implode('|', (array) $options) . ')=?(.*)/', $argument, $matches)) {
        return $matches[1] === '' ? false : $matches[1];
    }
}

for ($i = 1; $i < $argc; $i++) {
    if ($argv[$i] === '-h' || $argv[$i] === '--help') {
        $exe = $argv[0];

        $HELP = <<<EOT
Usage: $exe [options] [input-file]

Options include:

    -h, --help     Show this message
    -f=format      Set the output format (compact, compressed, crunched, expanded, or nested)
    -i=path        Set import path
    -p=precision   Set decimal number precision (default 5)
    -T             Dump formatted parse tree
    -v, --version  Print the version

EOT;
        exit($HELP);
    }

    if ($argv[$i] === '-T') {
        $dumpTree = true;
        continue;
    }

    if ($argv[$i] === '-v' || $argv[$i] === '--version') {
        exit(Version::VERSION . "\n");
    }

    $value = parseArgument($argv[$i], array('-f', '--style'));

    if (isset($value)) {
        $style = $value;
        continue;
    }

    $value = parseArgument($argv[$i], array('-i', '--load_paths'));

    if (isset($value)) {
        $loadPaths = $value;
        continue;
    }

    $value = parseArgument($argv[$i], array('-p', '--precision'));

    if (isset($value)) {
        $precision = $value;
        continue;
    }

    if (file_exists($argv[$i])) {
        $inputFile = $argv[$i];
        continue;
    }
}


if ($inputFile) {
    $data = file_get_contents($inputFile);

    $newWorkingDir = dirname(realpath($inputFile));
    $oldWorkingDir = getcwd();

    if ($oldWorkingDir !== $newWorkingDir) {
        $changeDir = chdir($newWorkingDir);
    }
} else {
    $data = '';

    while ( ! feof(STDIN)) {
        $data .= fread(STDIN, 8192);
    }
}

if ($dumpTree) {
    $parser = new Parser($inputFile ?: 'STDIN');

    print_r($parser->parse($data));

    exit();
}

$scss = new Compiler();

if ($loadPaths) {
    $scss->setImportPaths(explode(PATH_SEPARATOR, $loadPaths));
}

if ($style) {
    $scss->setFormatter('Leafo\\ScssPhp\\Formatter\\' . ucfirst($style));
}

if ($precision) {
    $scss->setNumberPrecision($precision);
}

echo $scss->compile($data, $inputFile ?: 'STDIN');

if ($changeDir) {
    chdir($oldWorkingDir);
}
