<?php

declare(strict_types=1);

namespace App\DataFixtures;

use App\Entity\Contract;
use App\Entity\Employee;
use App\Entity\Site;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

final class EmployeeFixtures extends Fixture implements DependentFixtureInterface
{
    public function load(ObjectManager $manager): void
    {
        $site = $this->getReference(FixtureReferences::SITE_MAIN, Site::class);

        $employeeStandard = new Employee()
            ->setFirstName('Alice')
            ->setLastName('Martin')
            ->setSite($site)
            ->setContract($this->getReference(FixtureReferences::CONTRACT_35, Contract::class))
            ->setDisplayOrder(1)
        ;

        $employee4h = new Employee()
            ->setFirstName('Bruno')
            ->setLastName('Petit')
            ->setSite($site)
            ->setContract($this->getReference(FixtureReferences::CONTRACT_4H, Contract::class))
            ->setDisplayOrder(2)
        ;

        $employeeForfait = new Employee()
            ->setFirstName('Chloe')
            ->setLastName('Durand')
            ->setSite($site)
            ->setContract($this->getReference(FixtureReferences::CONTRACT_FORFAIT, Contract::class))
            ->setDisplayOrder(3)
        ;

        $employeeInterim = new Employee()
            ->setFirstName('David')
            ->setLastName('Leroy')
            ->setSite($site)
            ->setContract($this->getReference(FixtureReferences::CONTRACT_INTERIM, Contract::class))
            ->setDisplayOrder(4)
        ;

        $manager->persist($employeeStandard);
        $manager->persist($employee4h);
        $manager->persist($employeeForfait);
        $manager->persist($employeeInterim);
        $manager->flush();

        $this->addReference(FixtureReferences::EMPLOYEE_STANDARD, $employeeStandard);
        $this->addReference(FixtureReferences::EMPLOYEE_4H, $employee4h);
        $this->addReference(FixtureReferences::EMPLOYEE_FORFAIT, $employeeForfait);
        $this->addReference(FixtureReferences::EMPLOYEE_INTERIM, $employeeInterim);
    }

    public function getDependencies(): array
    {
        return [
            SiteFixtures::class,
            ContractFixtures::class,
        ];
    }
}
