namespace Illuminate\View;

use InvalidArgumentException;
use Illuminate\Filesystem\Filesystem;
// about namespace
class FileViewFinder implements ViewFinderInterface
{// FileViewFinder implements ViewFinderInterface
    /**
     * The filesystem instance.
     *
     * @var \Illuminate\Filesystem\Filesystem
     */
    protected $files;//The filesystem instance.
   // The protected

    /**
     * The array of active view paths.
     *
     * @var array
     */
    protected $paths;//The array of active view paths
   // set the view paths

    /**
     * The array of views that have been located.
     *
     * @var array
     */
    protected $views = [];//The array of views that have been located
   // array of views

    /**
     * The namespace to file path hints.
     *
     * @var array
     */
    protected $hints = [];//The namespace to file path hints/ just like notes

    /**
     * Register a view extension with the finder.
     *
     * @var array
     */
    protected $extensions = ['blade.php', 'php'];// Register a view extension with the finder
   // get the extension with the finder.

    /**
     * Create a new file view loader instance.
     *
     * @param  \Illuminate\Filesystem\Filesystem  $files
     * @param  array  $paths
     * @param  array  $extensions
     * @return void
     */
    public function __construct(Filesystem $files, array $paths, array $extensions = null)
    {// something this construct is always loader instance.
        $this->files = $files;// set files
        $this->paths = $paths;// set path

        if (isset($extensions)) {//if have extensions
            $this->extensions = $extensions;// set the extensions
        }
    }// set the instance

    /**
     * Get the fully qualified location of the view.
     *
     * @param  string  $name
     * @return string
     */
    public function find($name)
    {//Get the fully qualified location of the view.
        if (isset($this->views[$name])) {
            return $this->views[$name];
        }// return it,just set this world

        if ($this->hasHintInformation($name = trim($name))) {// determine this hints
            return $this->views[$name] = $this->findNamedPathView($name);// set this path of view
        }

        return $this->views[$name] = $this->findInPaths($name, $this->paths);// default set this path
    }