<?php

namespace Src\Modules\JsonObjects\Interfaces\Application;

use Src\Common\Interfaces\Application\IBaseDomain;
use Src\Modules\JsonObjects\Interfaces\Application\IValidator;
use Src\Modules\JsonObjects\Interfaces\Dto\IFactory as IDtoFactory;
use Src\Modules\JsonObjects\Interfaces\Infrastructure\IItemPersistLayer;
use Src\Modules\JsonObjects\Interfaces\Infrastructure\IItemStorage;
use Src\Modules\JsonObjects\Interfaces\Dto\Item\IResourceItem;
use Src\Modules\JsonObjects\Interfaces\Application\IDataBuilder;
use Src\Modules\JsonObjects\Interfaces\Infrastructure\IDirsStorage;
use Src\Modules\JsonObjects\Interfaces\Infrastructure\IDirsPersistLayer;
use Src\Modules\JsonObjects\Interfaces\Dto\Dir\IResource as IDirResource;

interface IDomain extends IBaseDomain
{
    public function setValidator(IValidator $validator): void;
    public function setDtoFactory(IDtoFactory $factory): void;
    public function setPersistLayer(IItemPersistLayer $layer): void;
    public function setStorage(IItemStorage $storage): void;
    public function setDataBuilder(IDataBuilder $dataBuilder): void;
    public function setDirStorage(IDirsStorage $storage): void;
    public function setDirsPersistLayer(IDirsPersistLayer $layer): void;
    public function createObject(array $data): bool;
    public function editObject(array $data): bool;
    public function renameObject(array $data): bool;
    public function deleteObject(array $data): bool;
    public function deleteDir(array $data): bool;
    public function getItem(): IResourceItem;
    public function createDir(array $data): bool;
    public function renameDir(array $data): bool;
    public function getDir(): IDirResource;
}
