Completed
Pull Request — master (#3)
by Romain
01:42
created

Thread::isValidThreadSettingType()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
namespace Kerox\Messenger\Api;
3
4
use GuzzleHttp\Client;
5
use Kerox\Messenger\Model\ThreadSettings;
6
use Kerox\Messenger\Request\ThreadRequest;
7
use Kerox\Messenger\Response\ThreadResponse;
8
9
class Thread extends AbstractApi
10
{
11
12
    /**
13
     * ThreadSettings constructor.
14
     *
15
     * @param string $pageToken
16
     */
17
    public function __construct($pageToken)
18
    {
19
        parent::__construct($pageToken);
20
    }
21
22
    /**
23
     * @param \Kerox\Messenger\Model\ThreadSettings $threadSettings
24
     * @return \Kerox\Messenger\Response\ThreadResponse
25
     */
26
    public function addSetting(ThreadSettings $threadSettings): ThreadResponse
27
    {
28
        $request = new ThreadRequest($this->pageToken, $threadSettings);
29
        $response = $this->client->post('/me/thread_settings', $request->build());
30
31
        return new ThreadResponse($response);
32
    }
33
34
    /**
35
     * @param string $type
36
     * @param string $state
37
     * @return void
38
     */
39
    public function deleteSetting(string $type, string $state = null)
40
    {
41
        $this->isValidThreadSettingType($type);
42
43
        $threadSettings = new ThreadSettings($type, $state);
44
45
        $request = new ThreadRequest($this->pageToken, $threadSettings);
46
        $this->client->delete('/me/thread_settings', $request->build());
47
    }
48
49
    /**
50
     * @param string $threadSettingsType
51
     * @throws \InvalidArgumentException
52
     */
53
    private function isValidThreadSettingType(string $threadSettingsType)
54
    {
55
        $allowedThreadSettingsType = $this->getAllowedThreadSettingsType();
56
        if (!in_array($threadSettingsType, $allowedThreadSettingsType)) {
57
            throw new \InvalidArgumentException('$threadSettingsType must be either ' . implode(', '), $allowedThreadSettingsType);
58
        }
59
    }
60
61
    /**
62
     * @return array
63
     */
64
    private function getAllowedThreadSettingsType(): array
65
    {
66
        return [
67
            ThreadSettings::TYPE_GREETING,
68
            ThreadSettings::TYPE_CALL_TO_ACTIONS,
69
            ThreadSettings::TYPE_DOMAIN_WHITELISTING,
70
            ThreadSettings::TYPE_ACCOUNT_LINKING,
71
            ThreadSettings::TYPE_PAYMENT,
72
        ];
73
    }
74
}
75