<?php namespace Todaymade\Daux;

class GeneratorHelper
{
    /**
     * Copy all files from $path to $local_base
     *
     * @param string $path
     * @param string $local_base
     */
    public static function copyAssets($path, $local_base)
    {
        if (is_dir($path)) {
            static::rmdir($path);
        } else {
            mkdir($path);
        }

        mkdir($path . DIRECTORY_SEPARATOR . 'themes');
        static::copyRecursive(
            $local_base . DIRECTORY_SEPARATOR . 'themes',
            $path . DIRECTORY_SEPARATOR . 'themes'
        );
    }

    /**
     * Remove a directory recursively
     *
     * @param string $dir
     */
    protected static function rmdir($dir)
    {
        $it = new \RecursiveDirectoryIterator($dir);
        $files = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::CHILD_FIRST);
        foreach ($files as $file) {
            if ($file->getFilename() === '.' || $file->getFilename() === '..') {
                continue;
            }
            if ($file->isDir()) {
                rmdir($file->getRealPath());
            } else {
                unlink($file->getRealPath());
            }
        }
    }

    /**
     * Copy files recursively
     *
     * @param string $source
     * @param string $destination
     */
    public static function copyRecursive($source, $destination)
    {
        if (!is_dir($destination)) {
            mkdir($destination);
        }

        $dir = opendir($source);
        while (false !== ($file = readdir($dir))) {
            if ($file != '.' && $file != '..') {
                if (is_dir($source . DIRECTORY_SEPARATOR . $file)) {
                    static::copyRecursive(
                        $source . DIRECTORY_SEPARATOR . $file,
                        $destination . DIRECTORY_SEPARATOR . $file
                    );
                } else {
                    copy($source . DIRECTORY_SEPARATOR . $file, $destination . DIRECTORY_SEPARATOR . $file);
                }
            }
        }
        closedir($dir);
    }
}