Passed
Push — master ( 86b291...5e082c )
by Willy
02:08
created

ItemService::getRelicValueObjects()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 15
ccs 0
cts 13
cp 0
rs 9.4285
cc 2
eloc 9
nc 2
nop 1
crap 6
1
<?php
2
3
namespace Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Service\Item;
4
5
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\ArtifactTraitValueObject;
6
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\DamageValueObject;
7
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\RelicValueObject;
8
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\StandardItemValueObject;
9
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\ItemAppearanceValueObject;
10
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\ItemStatValueObject;
11
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\TooltipParamsValueObject;
12
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\WeaponInfoValueObject;
13
use Kubinashi\BattlenetApi\WorldOfWarcraft\CharacterProfileApi\Model\Item\WeaponItemValueObject;
14
15
/**
16
 * @author  Willy Reiche
17
 * @since   2017-08-23
18
 * @version 1.0
19
 */
20
class ItemService
21
{
22
    /**
23
     * @param \StdClass $item
24
     * @return StandardItemValueObject
25
     */
26
    public function getStandardItemValueObject($item)
27
    {
28
        $tooltipParams = $this->getTooltipParamsValueObject($item);
29
        $stats = $this->getItemStatValueObjects($item);
30
        $appearance = $this->getItemAppearanceValueObject($item);
31
32
        $armorItemValueObject = new StandardItemValueObject(
33
            $item->id,
34
            $item->name,
35
            $item->icon,
36
            $item->quality,
37
            $item->itemLevel,
38
            $tooltipParams,
39
            $stats,
40
            $item->armor,
41
            $item->context,
42
            $item->bonusLists,
43
            $item->displayInfoId,
44
            $appearance
45
        );
46
47
        return $armorItemValueObject;
48
    }
49
50
    /**
51
     * @param \StdClass $item
52
     * @return WeaponItemValueObject
53
     */
54
    public function getWeaponItemValueObject($item)
55
    {
56
        $weaponInfo = $this->getWeaponInfoValueObject($item->weaponInfo);
57
        $artifactTraits = $this->getArtifactTraitValueObjects($item->artifactTraits);
58
        $relics = $this->getRelicValueObjects($item->relics);
59
60
        $armorItemValueObject = new WeaponItemValueObject(
61
            $this->getStandardItemValueObject($item),
62
            $weaponInfo,
63
            $item->artifactId,
64
            $item->artifactAppearanceId,
65
            $artifactTraits,
66
            $relics
67
        );
68
69
        return $armorItemValueObject;
70
    }
71
72
    /**
73
     * @param \StdClass $item
74
     * @return TooltipParamsValueObject
75
     */
76
    private function getTooltipParamsValueObject($item)
77
    {
78
        $tooltipParams = new TooltipParamsValueObject(
79
            $item->tooltipParams->timewalkerLevel,
80
            $item->tooltipParams->transmogItem
81
        );
82
83
        return $tooltipParams;
84
    }
85
86
    /**
87
     * @param \StdClass $item
88
     * @return array
89
     */
90
    private function getItemStatValueObjects($item)
91
    {
92
        $stats = [];
93
94
        foreach ($item->stats as $stat) {
95
            $stats[] = new ItemStatValueObject(
96
                $stat->stat,
97
                $stat->amount
98
            );
99
        }
100
101
        return $stats;
102
    }
103
104
    /**
105
     * @param \StdClass $item
106
     * @return ItemAppearanceValueObject
107
     */
108
    private function getItemAppearanceValueObject($item)
109
    {
110
        $appearance = new ItemAppearanceValueObject(
111
            $item->appearance->itemId,
112
            $item->appearance->itemAppearanceModId
113
        );
114
115
        return $appearance;
116
    }
117
118
    /**
119
     * @param \StdClass $info
120
     * @return WeaponInfoValueObject
121
     */
122
    private function getWeaponInfoValueObject($info)
123
    {
124
        $damageValueObject = new DamageValueObject(
125
            $info->damage->min,
126
            $info->damage->max,
127
            $info->damage->exactMin,
128
            $info->damage->exactMax
129
        );
130
131
        $weaponInfo = new WeaponInfoValueObject(
132
            $damageValueObject,
133
            $info->weaponSpeed,
134
            $info->dps
135
        );
136
137
        return $weaponInfo;
138
    }
139
140
    /**
141
     * @param \StdClass $artifactTraits
142
     * @return ArtifactTraitValueObject[]
143
     */
144
    private function getArtifactTraitValueObjects($artifactTraits)
145
    {
146
        $itemArtifactTraits = [];
147
148
        foreach ($artifactTraits as $artifactTrait) {
0 ignored issues
show
Bug introduced by
The expression $artifactTraits of type object<stdClass> is not traversable.
Loading history...
149
            $itemArtifactTraits[] = new ArtifactTraitValueObject(
150
                $artifactTrait->id,
151
                $artifactTrait->rank
152
            );
153
        }
154
155
        return $itemArtifactTraits;
156
    }
157
158
    /**
159
     * @param \StdClass $relics
160
     * @return RelicValueObject[]
161
     */
162
    private function getRelicValueObjects($relics)
163
    {
164
        $itemRelics = [];
165
166
        foreach ($relics as $relic) {
0 ignored issues
show
Bug introduced by
The expression $relics of type object<stdClass> is not traversable.
Loading history...
167
            $itemRelics[] = new RelicValueObject(
168
                $relic->socket,
169
                $relic->itemId,
170
                $relic->context,
171
                $relic->bonusLists
172
            );
173
        }
174
175
        return $itemRelics;
176
    }
177
}
178