<?php

namespace Illuminate\Filesystem;

use Illuminate\Support\ServiceProvider;
// namespace
class FilesystemServiceProvider extends ServiceProvider
{// File system Service Provider extends Service Provider
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerNativeFilesystem();// register

$this->registerFlysystem();// register Fly system
}// register the service provider

/**
* Register the native filesystem implementation.
*
* @return void
*/
protected function registerNativeFilesystem()
{
$this->app->singleton('files', function () {
return new Filesystem;
});
}// register a singleton files, get a instance about filesystem

/**
* Register the driver based filesystem.
*
* @return void
*/
protected function registerFlysystem()
{
$this->registerManager();// first register Manager

$this->app->singleton('filesystem.disk', function () {
return $this->app['filesystem']->disk($this->getDefaultDriver());
});// if it is a disk, get the Default Driver

$this->app->singleton('filesystem.cloud', function () {
return $this->app['filesystem']->disk($this->getCloudDriver());
});//else set the Get Cloud Driver
}//register the driver based filesystem

/**
* Register the filesystem manager.
*
* @return void
*/
protected function registerManager()
{
$this->app->singleton('filesystem', function () {
return new FilesystemManager($this->app);
});// get a singleton filesystem use a new FilesystemManager
}// register Manager

/**
* Get the default file driver.
*
* @return string
*/
protected function getDefaultDriver()
{
return $this->app['config']['filesystems.default'];
}// get Default Driver more use a config array

/**
* Get the default cloud based file driver.
*
* @return string
*/
protected function getCloudDriver()
{
return $this->app['config']['filesystems.cloud'];
}// get the Cloud Driver
}