Passed
Push — master ( 0a21cd...0ad97c )
by Janko
05:01
created

SpacecraftStartup::startup()   A

Complexity

Conditions 5
Paths 2

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 5

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 5
eloc 13
nc 2
nop 2
dl 0
loc 18
ccs 15
cts 15
cp 1
crap 5
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 3
    public function __construct(
16
        private readonly SpacecraftRepositoryInterface $spacecraftRepository,
17
        private readonly SpacecraftSystemManagerInterface $spacecraftSystemManager,
18
        private readonly ActivatorDeactivatorHelperInterface $helper
19 3
    ) {}
20
21 3
    public function startup(SpacecraftWrapperInterface $wrapper, array $additionalSystemTypes = []): void
22
    {
23 3
        $isSaveNeeded = false;
24
25 3
        $wrapper
26 3
            ->get()
27 3
            ->getSystems()
28 3
            ->filter(fn(SpacecraftSystem $system): bool => !$system->getMode()->isActivated() && $system->isHealthy())
29 3
            ->map(fn(SpacecraftSystem $system): SpacecraftSystemTypeInterface =>  $this->spacecraftSystemManager->lookupSystem($system->getSystemType()))
30 3
            ->filter(fn(SpacecraftSystemTypeInterface $systemType): bool => $systemType->getDefaultMode()->isActivated()
31 3
                || in_array($systemType->getSystemType(), $additionalSystemTypes))
32 3
            ->forAll(function (int $key, SpacecraftSystemTypeInterface $systemType) use ($wrapper, &$isSaveNeeded): bool {
33 3
                $isSaveNeeded = $this->helper->activate($wrapper, $systemType->getSystemType(), new InformationWrapper()) || $isSaveNeeded;
34 3
                return true;
35 3
            });
36
37 3
        if ($isSaveNeeded) {
38 2
            $this->spacecraftRepository->save($wrapper->get());
39
        }
40
    }
41
}
42