<?php

namespace Src\Modules\Auth\Interfaces;

use Src\Modules\Auth\Interfaces\Application\IFactory as IApplicationFactory;
use Src\Modules\Auth\Interfaces\Dto\IFactory as IDtoFactory;
use Src\Modules\Auth\Interfaces\Infrastructure\IFactory as IInfrastructureFactory;
use Src\Modules\Auth\Interfaces\Pages\IFactory as IPagesFactory;
use Src\Modules\Auth\Interfaces\IModulesProvider;
use Src\Modules\Auth\Interfaces\Laravel\IFactory as ILaravelFactory;

interface IFactory {
    const ADMINS_TABLE = 'admins-table';
    public function injectModules(IModulesProvider $provider): void;
    public function loadSettings(array $settings): void;
    public function getSetting(string $key);
    public function getModulesProvider(): IModulesProvider;
    public function getApplicationFactory(): IApplicationFactory;
    public function getDtoFactory(): IDtoFactory;
    public function getInfrastructureFactory(): IInfrastructureFactory;
    public function getPagesFactory(): IPagesFactory;
    public function getLaravelFactory(): ILaravelFactory;
}