Test Failed
Push — master ( bbdbb0...ecc533 )
by Nico
16:37 queued 10:47
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
use request;
8
use Stu\Component\Spacecraft\System\SpacecraftSystemTypeEnum;
9
use Stu\Module\Control\GameControllerInterface;
10
use Stu\Module\Control\ViewControllerInterface;
11
use Stu\Module\Spacecraft\Lib\SpacecraftLoaderInterface;
12
use Stu\Module\Spacecraft\Lib\SpacecraftWrapperInterface;
13
use Stu\Module\Spacecraft\Lib\SpacecraftWrapperFactoryInterface;
14
use Stu\Orm\Repository\SpacecraftRepositoryInterface;
15
16
final class ShowWarpcoreChargeTransfer implements ViewControllerInterface
17
{
18
    public const VIEW_IDENTIFIER = 'SHOW_WARPCORE_CHARGE_TRANSFER';
19
20
    /**
21
     * @param SpacecraftLoaderInterface<SpacecraftWrapperInterface> $spacecraftLoader
22
     */
23
    public function __construct(
24
        private SpacecraftLoaderInterface $spacecraftLoader,
25
        private SpacecraftRepositoryInterface $spacecraftRepository,
26
        private SpacecraftWrapperFactoryInterface $spacecraftWrapperFactory
27
    ) {}
28
29
    #[\Override]
30
    public function handle(GameControllerInterface $game): void
31
    {
32
        $userId = $game->getUser()->getId();
33
34
        $wrapper = $this->spacecraftLoader->getWrapperByIdAndUser(
35
            request::indInt('id'),
36
            $userId
37
        );
38
39
        $spacecraft = $wrapper->get();
40
41
        if (!$spacecraft->hasSpacecraftSystem(SpacecraftSystemTypeEnum::WARPCORE_CHARGE_TRANSFER)) {
42
            return;
43
        }
44
45
        if (
46
            $spacecraft->getSystemState(SpacecraftSystemTypeEnum::WARPDRIVE) ||
47
            $spacecraft->getSystemState(SpacecraftSystemTypeEnum::SHIELDS)
48
        ) {
49
            $game->setTemplateVar('SYSTEMWARNING', true);
50
            $game->setTemplateVar('WARNING_MESSAGE', 'Warpantrieb und Schilde müssen deaktiviert sein');
51
        } else {
52
            $nearbySpacecrafts = $this->spacecraftRepository->getNearbySpacecraftsForWarpcoreTransfer($spacecraft);
53
            $groups = $this->spacecraftWrapperFactory->wrapSpacecraftsAsGroups($nearbySpacecrafts);
54
            $game->setTemplateVar('SPACECRAFT_GROUPS', $groups);
55
        }
56
57
        $game->setPageTitle('Warpkern Ladungstransfer');
58
        $game->setMacroInAjaxWindow('html/spacecraft/warpcoreChargeTransfer.twig');
59
        $game->setTemplateVar('SPACECRAFT', $wrapper);
60
    }
61
}
62