<?php

namespace AutoAdmin\Bundle\Admin\Controller\Admin\Traits;

use AutoAdmin\Bundle\Admin\Configuration\ConfigManager;
use AutoAdmin\Bundle\Admin\Factory\BuilderFactory;
use AutoAdmin\Bundle\Admin\Factory\ContentFactory;
use AutoAdmin\Bundle\Admin\Finder\EntityFinder;
use AutoAdmin\Bundle\Admin\Helper\AccessHelper;
use AutoAdmin\Bundle\Admin\Helper\EntityHelper;
use AutoAdmin\Bundle\Admin\Router\AdminRouter;
use AutoAdmin\Bundle\Content\Duplicator\Manager\DuplicatorManager;
use AutoAdmin\Bundle\Content\Routing\ContentRouter;
use AutoAdmin\Bundle\Content\Site\SiteContextHelper;
use AutoAdmin\Bundle\Seo\Generator\GeneratorManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\Service\Attribute\Required;

trait AbstractAdminControllerContainerTrait
{
    protected EntityHelper $entityHelper;

    protected BuilderFactory $builderFactory;

    protected AdminRouter $adminRouter;

    protected ContentFactory $contentFactory;

    protected AccessHelper $accessHelper;

    protected ConfigManager $configManager;

    protected ContentRouter $contentRouter;

    protected SiteContextHelper $siteContextHelper;

    protected EntityFinder $entityFinder;

    protected GeneratorManager $seoGenerator;

    protected EntityManagerInterface $em;

    protected DuplicatorManager $duplicatorManager;

    #[Required]
    public function setEntityHelper(EntityHelper $entityHelper): void
    {
        $this->entityHelper = $entityHelper;
    }

    #[Required]
    public function setBuilderFactory(BuilderFactory $builderFactory): void
    {
        $this->builderFactory = $builderFactory;
    }

    #[Required]
    public function setAdminRouter(AdminRouter $adminRouter): void
    {
        $this->adminRouter = $adminRouter;
    }

    #[Required]
    public function setContentFactory(ContentFactory $contentFactory): void
    {
        $this->contentFactory = $contentFactory;
    }

    #[Required]
    public function setAccessHelper(AccessHelper $accessHelper): void
    {
        $this->accessHelper = $accessHelper;
    }

    #[Required]
    public function setConfigManager(ConfigManager $configManager): void
    {
        $this->configManager = $configManager;
    }

    #[Required]
    public function setContentRouter(ContentRouter $contentRouter): void
    {
        $this->contentRouter = $contentRouter;
    }

    #[Required]
    public function setSiteContextHelper(SiteContextHelper $siteContextHelper): void
    {
        $this->siteContextHelper = $siteContextHelper;
    }

    #[Required]
    public function setEntityFinder(EntityFinder $entityFinder): void
    {
        $this->entityFinder = $entityFinder;
    }

    #[Required]
    public function setSeoGenerator(GeneratorManager $seoGenerator): void
    {
        $this->seoGenerator = $seoGenerator;
    }

    #[Required]
    public function setEm(EntityManagerInterface $em): void
    {
        $this->em = $em;
    }

    #[Required]
    public function setDuplicatorManager(DuplicatorManager $duplicatorManager): void
    {
        $this->duplicatorManager = $duplicatorManager;
    }
}
