Test Failed
Pull Request — master (#2248)
by Janko
17:03 queued 08:24
created

SpacecraftStartup::startup()   A

Complexity

Conditions 5
Paths 2

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 5
eloc 13
nc 2
nop 2
dl 0
loc 18
rs 9.5222
c 1
b 1
f 0
1
<?php
2
3
namespace Stu\Module\Spacecraft\Lib\Auxiliary;
4
5
use Stu\Component\Spacecraft\System\Control\ActivatorDeactivatorHelperInterface;
6
use Stu\Component\Spacecraft\System\SpacecraftSystemManagerInterface;
7
use Stu\Component\Spacecraft\System\SpacecraftSystemTypeInterface;
8
use Stu\Lib\Information\InformationWrapper;
9
use Stu\Module\Spacecraft\Lib\SpacecraftWrapperInterface;
10
use Stu\Orm\Entity\SpacecraftSystem;
11
use Stu\Orm\Repository\SpacecraftRepositoryInterface;
12
13
class SpacecraftStartup implements SpacecraftStartupInterface
14
{
15
    public function __construct(
16
        private readonly SpacecraftRepositoryInterface $spacecraftRepository,
17
        private readonly SpacecraftSystemManagerInterface $spacecraftSystemManager,
18
        private readonly ActivatorDeactivatorHelperInterface $helper
19
    ) {}
20
21
    public function startup(SpacecraftWrapperInterface $wrapper, array $additionalSystemTypes = []): void
22
    {
23
        $isSaveNeeded = false;
24
25
        $wrapper
26
            ->get()
27
            ->getSystems()
28
            ->filter(fn(SpacecraftSystem $system): bool => !$system->getMode()->isActivated() && $system->isHealthy())
29
            ->map(fn(SpacecraftSystem $system): SpacecraftSystemTypeInterface =>  $this->spacecraftSystemManager->lookupSystem($system->getSystemType()))
30
            ->filter(fn(SpacecraftSystemTypeInterface $systemType): bool => $systemType->getDefaultMode()->isActivated()
31
                || in_array($systemType->getSystemType(), $additionalSystemTypes))
32
            ->forAll(function (int $key, SpacecraftSystemTypeInterface $systemType) use ($wrapper, &$isSaveNeeded): bool {
33
                $isSaveNeeded = $this->helper->activate($wrapper, $systemType->getSystemType(), new InformationWrapper()) || $isSaveNeeded;
34
                return true;
35
            });
36
37
        if ($isSaveNeeded) {
38
            $this->spacecraftRepository->save($wrapper->get());
39
        }
40
    }
41
}
42