#!/usr/bin/php -q
<?php

echo new SimpleMinify;

class SimpleMinify
{
    protected $allowedExtensions = ['css', 'js'];

    public function __construct()
    {
        $this->count = $_SERVER['argc'];
        $this->parameters = $this->getParameters();
        $this->doMyjob();
    }

    protected function getParameters()
    {
        $parameters = $_SERVER['argv'];

        if ($this->count === 2) {
            if ($parameters[1] === '.' or $parameters[1] === './') {
                $parameters[1] = getcwd();
            } elseif (substr($parameters[1], 0, 1) !== '/') {
                $parameters[1] = getcwd() . '/' . $parameters[1];
            }
        } elseif ($this->count === 1) {
            $parameters[1] = getcwd();    
            $this->count = 2;    
        }

        return $parameters;
    }
    
    public function doMyjob()
    {
        if ($this->count == 2) {
            list($filename, $source) = $this->parameters;
            $this->minify($source);
        }
    }

    public function minify($source)
    {
        if ($source and is_dir($source)) {

            chdir($source);  //set work directory to $source directory ,you can check you current work directory by function getcwd()
            $subDirectorys = [];

            if ($source and is_dir($source)) {
                $files = scandir($source);

                if($files) {
                    array_shift($files);array_shift($files);  //remove the first . and second .. 

                    foreach ($files as $file) {
                        if (is_file($file)) {
                            $extension = pathinfo($file, PATHINFO_EXTENSION);

                            if (in_array($extension, $this->allowedExtensions)) {
                                $extensionLength = strlen($extension);
                                $fileNameLastPart = substr($file, -($extensionLength + 5));

                                if ($fileNameLastPart !== ('.min.' . $extension)) {
                                    shell_exec("yuglify $file");
                                }
                            }
                        } elseif (is_dir($file)) {
                            $subDirectorys[] = $file;
                        }
                    }
                    $cwd = getcwd();
                    if($subDirectorys) {
                        foreach ($subDirectorys as $subDirectory) {
                            $this->minify($cwd . '/' . $subDirectory);
                        }
                    }
                }
            }
        }
    }

    public function __toString()
    {
        if ($this->count != 2) {
            return "Please enter one directory\n";
        } else {
            return "Thanks for you using.I finished my job!\n";
        }
    }
}

