<?php declare(strict_types=1);

namespace App\DataFixtures;

class System extends \Doctrine\Bundle\FixturesBundle\Fixture
{

    public function __construct(
        private \Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface $hasherFactory,
    ) {
    }

    public function load(\Doctrine\Persistence\ObjectManager $manager): void
    {
        $this->createAdministrationUsers($manager);
        $manager->flush();

        $this->createNavigation($manager);
        $manager->flush();
    }

    private function createAdministrationUsers(\Doctrine\Persistence\ObjectManager $manager): void
    {
        $administrator = new \App\Engine\AdministratorUser\AdministratorUser();
        $administrator->setEmail('debug@lifecode.cz');
        $administrator->setFirstName('Správce');
        $administrator->setLastName('LifeCode.cz');
        $administrator->setRoles([\App\Engine\Security\Role::SUPER_ADMINISTRATOR->value]);
        $hasher = $this->hasherFactory->getPasswordHasher(\App\Engine\AdministratorUser\AdministratorUser::class);
        $administrator->setPassword($hasher->hash("administrator"));
        $administrator->setStatus(\App\Engine\AdministratorUser\StatusEnum::Active);
        $manager->persist($administrator);

        $administrator = new \App\Engine\AdministratorUser\AdministratorUser();
        $administrator->setEmail('sikula@detskamisie.cz');
        $administrator->setFirstName('Zbyšek');
        $administrator->setLastName('Šikula');
        $administrator->setRoles([\App\Engine\Security\Role::ADMINISTRATOR->value]);
        $hasher = $this->hasherFactory->getPasswordHasher(\App\Engine\AdministratorUser\AdministratorUser::class);
        $administrator->setPassword($hasher->hash("TabloidRudderChooserNursingRejoicingShrunk"));
        $administrator->setStatus(\App\Engine\AdministratorUser\StatusEnum::Active);
        $manager->persist($administrator);
    }

    private function createNavigation(\Doctrine\Persistence\ObjectManager $manager): void
    {
        $aboutUsNavigation = new \App\Engine\Navigation\Navigation();
        $aboutUsNavigation->setTitle('O nás');
        $aboutUsNavigation->setUrl('o-nas');
        $aboutUsNavigation->setPriority(10);
        $manager->persist($aboutUsNavigation);

        $whoWeAreNavigation = new \App\Engine\Navigation\Navigation();
        $whoWeAreNavigation->setTitle('Kdo jsme');
        $whoWeAreNavigation->setUrl('kdo-jsme');
        $whoWeAreNavigation->setPriority(1010);
        $whoWeAreNavigation->setParent($aboutUsNavigation);
        $manager->persist($whoWeAreNavigation);

        $visionsAndGoalsNavigation = new \App\Engine\Navigation\Navigation();
        $visionsAndGoalsNavigation->setTitle('Vize a cíle');
        $visionsAndGoalsNavigation->setUrl('vize-a-cile');
        $visionsAndGoalsNavigation->setPriority(1020);
        $visionsAndGoalsNavigation->setParent($aboutUsNavigation);
        $manager->persist($visionsAndGoalsNavigation);

        $aboutUsNavigation = new \App\Engine\Navigation\Navigation();
        $aboutUsNavigation->setTitle('Kontakty');
        $aboutUsNavigation->setUrl('kontakty');
        $aboutUsNavigation->setPriority(20);
        $manager->persist($aboutUsNavigation);
    }
}
