Passed
Pull Request — master (#1825)
by Nico
59:43 queued 25:38
created

TrackerDeviceManager::sendDeactivationPMs()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 27
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 9.6664

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 3
nop 3
dl 0
loc 27
ccs 2
cts 21
cp 0.0952
crap 9.6664
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
namespace Stu\Module\Ship\Lib\Interaction;
4
5
use Stu\Component\Ship\System\ShipSystemManagerInterface;
6
use Stu\Component\Ship\System\ShipSystemTypeEnum;
7
use Stu\Module\Message\Lib\PrivateMessageFolderTypeEnum;
8
use Stu\Module\Message\Lib\PrivateMessageSenderInterface;
9
use Stu\Module\PlayerSetting\Lib\UserEnum;
10
use Stu\Module\Ship\Lib\ShipWrapperInterface;
11
use Stu\Orm\Entity\ShipInterface;
12
use Stu\Orm\Entity\UserInterface;
13
use Stu\Orm\Repository\ShipSystemRepositoryInterface;
14
15
class TrackerDeviceManager implements TrackerDeviceManagerInterface
16
{
17 7
    public function __construct(
18
        private ShipSystemRepositoryInterface $shipSystemRepository,
19
        private PrivateMessageSenderInterface $privateMessageSender
20
    ) {
21 7
    }
22
23
    public function resetTrackersOfTrackedShip(
24
        ShipWrapperInterface $trackedShipWrapper,
25
        ShipSystemManagerInterface $shipSystemManager,
26
        bool $sendPmToTargetOwner
27
    ): void {
28
29
        $shipWrapperFactory = $trackedShipWrapper->getShipWrapperFactory();
30
31
        foreach ($this->shipSystemRepository->getTrackingShipSystems($trackedShipWrapper->get()->getId()) as $system) {
32
33
            $this->deactivateTrackerIfActive($shipWrapperFactory->wrapShip($system->getShip()), $sendPmToTargetOwner);
34
        }
35
    }
36
37 3
    public function deactivateTrackerIfActive(ShipWrapperInterface $wrapper, bool $sendPmToTargetOwner): void
38
    {
39 3
        $tracker = $wrapper->getTrackerSystemData();
40
41 3
        if ($tracker === null) {
42 1
            return;
43
        }
44
45 2
        $targetWrapper = $tracker->getTargetWrapper();
46 2
        if ($targetWrapper === null) {
47 1
            return;
48
        }
49
50 1
        $this->sendDeactivationPMs($wrapper->get(), $targetWrapper->get(), $sendPmToTargetOwner);
51
52 1
        $wrapper
53 1
            ->getShipSystemManager()
54 1
            ->deactivate($wrapper, ShipSystemTypeEnum::SYSTEM_TRACKER, true);
55
    }
56
57 1
    private function sendDeactivationPMs(ShipInterface $ship, ShipInterface $target, bool $sendPmToTargetOwner): void
58
    {
59 1
        if ($target->getUser() !== $ship->getUser()) {
60
61
            //send pm to target owner
62
            if ($sendPmToTargetOwner) {
63
                $this->privateMessageSender->send(
64
                    UserEnum::USER_NOONE,
65
                    $target->getUser()->getId(),
66
                    sprintf(
67
                        'Die Crew der %s hat einen Transponder gefunden und deaktiviert. %s',
68
                        $target->getName(),
69
                        $this->getTrackerSource($ship->getUser())
70
                    ),
71
                    PrivateMessageFolderTypeEnum::SPECIAL_SHIP
72
                );
73
            }
74
75
            //send pm to tracker owner
76
            $this->privateMessageSender->send(
77
                UserEnum::USER_NOONE,
78
                $ship->getUser()->getId(),
79
                sprintf(
80
                    'Die %s hat die Verbindung zum Tracker verloren',
81
                    $ship->getName()
82
                ),
83
                PrivateMessageFolderTypeEnum::SPECIAL_SHIP
84
            );
85
        }
86
    }
87
88
    private function getTrackerSource(UserInterface $user): string
89
    {
90
        switch (random_int(0, 2)) {
91
            case 0:
92
                return _('Der Ursprung kann nicht identifiziert werden');
93
            case 1:
94
                return sprintf(_('Der Ursprung lässt auf %s schließen'), $user->getName());
95
            case 2:
96
                return sprintf(_('Der Ursprung lässt darauf schließen, dass er %s-Herkunft ist'), $user->getFaction()->getName());
97
            default:
98
                return '';
99
        }
100
    }
101
}
102