<?php
namespace Drush\Config;

use Consolidation\Config\Util\ConfigOverlay;
use Symfony\Component\Filesystem\Exception\IOException;
use Symfony\Component\Filesystem\Filesystem;
use Webmozart\PathUtil\Path;

/**
 * Accessors for common Drush config keys.
 */
class DrushConfig extends ConfigOverlay
{
    public function cwd()
    {
        return $this->get('env.cwd');
    }

    public function home()
    {
        return $this->get('env.home');
    }

    public function user()
    {
        return $this->get('env.user');
    }

    public function isWindows()
    {
        return $this->get('env.is-windows');
    }

    public function tmp()
    {
        return $this->get('env.tmp');
    }

    public function cache()
    {
        $candidates = [
            $this->get('drush.paths.cache-directory'),
            Path::join($this->home(), '.drush/cache'),
            Path::join($this->tmp(), 'drush-' . $this->user() . '/cache'),
        ];

        $fs = new Filesystem();
        foreach (array_filter($candidates) as $candidate) {
            try {
                $fs->mkdir($candidate);
                return $candidate;
            } catch (IOException $ioException) {
                // Do nothing. Jump to the next candidate.
            }
        }
        throw new \Exception('Cannot create the Drush cache directory. Tried next candidates: ' . implode(', ', $candidates));
    }
}
