<?php namespace Modules\Workshop\Http\Controllers;

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
use Laracasts\Flash\Flash;
use Modules\Core\Http\Controllers\Admin\AdminBaseController;
use Modules\Workshop\Http\Requests\GenerateModuleRequest;
use Modules\Workshop\Http\Requests\InstallModuleRequest;
use Modules\Workshop\Http\Requests\MigrateModuleRequest;
use Modules\Workshop\Http\Requests\SeedModuleRequest;
use Symfony\Component\Console\Output\BufferedOutput;

class WorkbenchController extends AdminBaseController
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Show the index view
     * @return mixed
     */
    public function index()
    {
        return View::make('workshop::admin.workbench.index');
    }

    /**
     * Generate a module given its name
     * @param GenerateModuleRequest $request
     * @return mixed
     */
    public function generate(GenerateModuleRequest $request)
    {
        $output = new BufferedOutput;
        Artisan::call('module:make', ['name' => $request->name], $output);

        Flash::message($output->fetch());
        return Redirect::route('dashboard.workbench.index');
    }

    /**
     * Run the migration for the given module
     * @param MigrateModuleRequest $request
     * @return mixed
     */
    public function migrate(MigrateModuleRequest $request)
    {
        $output = new BufferedOutput;
        Artisan::call('module:migrate', ['module' => $request->module], $output);

        Flash::message($output->fetch());
        return Redirect::route('dashboard.workbench.index');
    }

    /**
     * Run the install command for the given vendor/module
     * @param InstallModuleRequest $request
     * @return mixed
     */
    public function install(InstallModuleRequest $request)
    {
        $output = new BufferedOutput;
        $arguments['name'] = $request->vendorName;
        if ($request->subtree) {
            $arguments['--tree'] = '';
        }
        Artisan::call('module:install', $arguments, $output);

        Flash::message($output->fetch());
        return Redirect::route('dashboard.workbench.index');
    }

    /**
     * Run the seed command for the given module
     * @param SeedModuleRequest $request
     * @return mixed
     */
    public function seed(SeedModuleRequest $request)
    {
        $output = new BufferedOutput;
        Artisan::call('module:seed', ['module' => $request->module], $output);

        Flash::message($output->fetch());
        return Redirect::route('dashboard.workbench.index');
    }
}