#!/usr/bin/env php
<?php
/**
 * User: ben
 * Email: benhuang1024@gmail.com
 * Date: 2019-01-01
 * Time: 00:01
 */

$filter_folder = [
    '.git',
    'vendor',
    'node_modules',
    '.github',
    '.styleci.yml',
    '.travis.yml',
    
];

$product = __DIR__.'/../'.checkRequestVariable();
$laravel_plus_patch = __DIR__; 
dirCopy($laravel_plus_patch,$product);

function dirCopy($src = '', $dst = '')
{
    global $filter_folder;
    if (empty($src) || empty($dst))
    {
        return false;
    }
 
    $dir = opendir($src);
    dirMkdir($dst);
    while (false !== ($file = readdir($dir)))
    {
        if (($file != '.') && ($file != '..') && !in_array($file,$filter_folder))
        {
            echo $file.PHP_EOL;
            if (is_dir($src . '/' . $file))
            {
                dirCopy($src . '/' . $file, $dst . '/' . $file);
            }
            else
            {
                copy($src . '/' . $file, $dst . '/' . $file);
            }
        }
    }
    closedir($dir);
 
    return true;
}
 

function dirMkdir($path = '', $mode = 0777, $recursive = true)
{
    clearstatcache();
    if (!is_dir($path))
    {
        mkdir($path, $mode, $recursive);
        return chmod($path, $mode);
    }
 
    return true;
}

function checkRequestVariable(): string
{
    global $argv, $laravel_plus_basename;
    if (empty($argv) || !isset($argv[1]) || empty($argv[1])) {
        echo "error: No project name set" . PHP_EOL;
        echo "eg): php {$laravel_plus_basename}/create YourProject" . PHP_EOL;
        die;
    }
    return $argv[1];
}