Test Failed
Push — dev ( bbdbb0...17256f )
by Nico
05:36
created

ShowWarpcoreChargeTransfer::handle()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 31
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 20
nc 3
nop 1
dl 0
loc 31
rs 9.6
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Spacecraft\View\ShowWarpcoreChargeTransfer;
6
7
8
use Stu\Module\Control\GameControllerInterface;
9
use Stu\Module\Control\ViewControllerInterface;
10
use Stu\Module\Spacecraft\Lib\SpacecraftLoaderInterface;
11
use Stu\Module\Spacecraft\Lib\SpacecraftWrapperInterface;
12
use Stu\Module\Spacecraft\Lib\SpacecraftWrapperFactoryInterface;
13
use Stu\Component\Spacecraft\System\SpacecraftSystemModeEnum;
14
use Stu\Component\Spacecraft\System\SpacecraftSystemTypeEnum;
15
use Stu\Orm\Repository\SpacecraftRepositoryInterface;
16
use request;
17
18
final class ShowWarpcoreChargeTransfer implements ViewControllerInterface
19
{
20
    public const VIEW_IDENTIFIER = 'SHOW_WARPCORE_CHARGE_TRANSFER';
21
22
    /**
23
     * @param SpacecraftLoaderInterface<SpacecraftWrapperInterface> $spacecraftLoader
24
     */
25
    public function __construct(
26
        private SpacecraftLoaderInterface $spacecraftLoader,
27
        private SpacecraftRepositoryInterface $spacecraftRepository,
28
        private SpacecraftWrapperFactoryInterface $spacecraftWrapperFactory
29
    ) {}
30
31
    #[\Override]
32
    public function handle(GameControllerInterface $game): void
33
    {
34
        $userId = $game->getUser()->getId();
35
36
        $wrapper = $this->spacecraftLoader->getByIdAndUser(
37
            request::indInt('id'),
38
            $userId
39
        );
40
41
        $spacecraft = $wrapper->get();
42
43
        if (!$spacecraft->hasSpacecraftSystem(SpacecraftSystemTypeEnum::WARPCORE_CHARGE_TRANSFER)) {
44
            return;
45
        }
46
47
        if (
48
            $spacecraft->getSystemState(SpacecraftSystemTypeEnum::WARPDRIVE) ||
49
            $spacecraft->getSystemState(SpacecraftSystemTypeEnum::SHIELDS)
50
        ) {
51
            $game->setTemplateVar('SYSTEMWARNING', true);
52
            $game->setTemplateVar('WARNING_MESSAGE', 'Warpantrieb und Schilde müssen deaktiviert sein');
53
        } else {
54
            $nearbySpacecrafts = $this->spacecraftRepository->getNearbySpacecraftsForWarpcoreTransfer($spacecraft);
55
            $groups = $this->spacecraftWrapperFactory->wrapSpacecraftsAsGroups($nearbySpacecrafts);
56
            $game->setTemplateVar('SPACECRAFT_GROUPS', $groups);
57
        }
58
59
        $game->setPageTitle('Warpkern Ladungstransfer');
60
        $game->setMacroInAjaxWindow('html/spacecraft/warpcoreChargeTransfer.twig');
61
        $game->setTemplateVar('SPACECRAFT', $wrapper);
62
    }
63
}
64