<?php

namespace Lc\SovBundle\Container\User;

use App\Entity\User\User;
use Lc\SovBundle\Builder\User\UserBuilder;
use Lc\SovBundle\Definition\Field\User\UserFieldDefinition;
use Lc\SovBundle\Definition\RolesDefinitionInterface;
use Lc\SovBundle\Factory\User\UserFactory;
use Lc\SovBundle\Repository\User\UserRepositoryQuery;
use Lc\SovBundle\Repository\User\UserStore;
use Lc\SovBundle\Solver\User\UserSolver;

class UserContainer
{
    protected UserFactory $factory;
    protected UserBuilder $builder;
    protected UserRepositoryQuery $repositoryQuery;
    protected UserStore $store;
    protected UserSolver $solver;
    protected UserFieldDefinition $fieldDefinition;
    protected RolesDefinitionInterface $rolesDefinition;

    public function __construct(
        UserFactory $factory,
        UserBuilder $builder,
        UserRepositoryQuery $repositoryQuery,
        UserStore $store,
        UserSolver $solver,
        UserFieldDefinition $fieldDefinition,
        RolesDefinitionInterface $rolesDefinition
    ) {
        $this->factory = $factory;
        $this->builder = $builder;
        $this->repositoryQuery = $repositoryQuery;
        $this->store = $store;
        $this->solver = $solver;
        $this->fieldDefinition = $fieldDefinition;
        $this->rolesDefinition = $rolesDefinition;
    }
    public static function getEntityFqcn()
    {
        return User::class;
    }

    public function getFactory(): UserFactory
    {
        return $this->factory;
    }

    public function getBuilder(): UserBuilder
    {
        return $this->builder;
    }

    public function getRepositoryQuery(): UserRepositoryQuery
    {
        return $this->repositoryQuery;
    }

    public function getStore(): UserStore
    {
        return $this->store;
    }

    public function getSolver(): UserSolver
    {
        return $this->solver;
    }

    public function getFieldDefinition(): UserFieldDefinition
    {
        return $this->fieldDefinition;
    }

    public function getRoleDefinition(): RolesDefinitionInterface
    {
        return $this->rolesDefinition;
    }
}
