<?php namespace Modules\Core\Foundation\Theme;

class AssetPublisher
{
    /**
     * @var \Illuminate\Filesystem\Filesystem
     */
    protected $finder;
    /**
     * @var ThemeManager
     */
    protected $repository;

    /**
     * @var Theme
     */
    private $theme;

    /**
     * @param Theme $theme
     */
    public function __construct(Theme $theme)
    {
        $this->theme = $theme;
    }

    /**
     * @param $finder
     * @return $this
     */
    public function setFinder($finder)
    {
        $this->finder = $finder;

        return $this;
    }

    /**
     * @param $repository
     * @return $this
     */
    public function setRepository($repository)
    {
        $this->repository = $repository;

        return $this;
    }

    /**
     * Publish the assets
     */
    public function publish()
    {
        if (!$this->finder->isDirectory($sourcePath = $this->getSourcePath())) {
            $message = "Source path does not exist : {$sourcePath}";
            throw new \InvalidArgumentException($message);
        }
        if (!$this->finder->isDirectory($destinationPath = $this->getDestinationPath())) {
            $this->finder->makeDirectory($destinationPath, 0775, true);
        }
        if ($this->finder->copyDirectory($sourcePath, $destinationPath)) {
            return true;
        }
    }

    /**
     * Get the original source path
     * @return string
     */
    public function getSourcePath()
    {
        return $this->theme->getPath() . '/assets';
    }

    /**
     * Get the destination path
     * @return string
     */
    public function getDestinationPath()
    {
        return $this->repository->getAssetPath($this->theme->getLowerName());
    }
}