<?php

namespace Shasoft\SamoyedCMG\Service;


use 
Shasoft\Support\File;
use 
Shasoft\SamoyedCMG\Service\IPath;
use 
Shasoft\SamoyedCMG\Service\IRoute;

// Пути
class Path implements IPath
{
    
// Базовая директория
    
protected string $basepath;
    
// Конструктор
    
public function __construct(protected IRoute $route)
    {
        
// Базовая директория сайта
        
$this->basepath File::normalize(__DIR__ "/.."true);
    }
    
// Директория сайта
    
public function site(?string $pathX null): string
    
{
        
$ret $this->basepath;
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
    
// Директория пакетов
    
public function vendor(?string $pathX null): string
    
{
        
$ret $this->site('vendor');
        
$ret '';
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
    
// Директория пакета
    
public function package(string $packageName, ?string $pathX null): string
    
{
        
$ret $this->vendor($packageName);
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
    
// Временная директория
    
public function temp(?string $pathX null): string
    
{
        
$ret $this->site('~.temp/demo');
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
    
// Директория www сервера
    
public function wwwServer(?string $pathX null): string
    
{
        
$ret $this->site('www-server/@/'.$this->route->host());
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
    
// Файловое хранилище
    
public function storage(?string $pathX null): string
    
{
        
$ret $this->site('storage/demo');
        if (!
is_null($pathX)) {
            
$ret .= '/' $pathX;
        }
        return 
$ret;
    }
}