Completed
Push — master ( c4c942...8e91e5 )
by Leo
02:07
created

Api::contactAccept()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 3
dl 0
loc 8
ccs 0
cts 6
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace leocata\M1;
4
5
use leocata\M1\Abstracts\CallbackMethods;
6
use leocata\M1\Abstracts\RequestMethods;
7
use leocata\M1\Exceptions\MethodNotFound;
8
use leocata\M1\Exceptions\MissingMandatoryField;
9
use leocata\M1\InternalFunctionality\DummyLogger;
10
use leocata\M1\Methods\Request\ContactAccept;
11
use leocata\M1\Methods\Request\MessageDelivered;
12
use leocata\M1\Methods\Request\MessageTyped;
13
use leocata\M1\Methods\Request\SendMessage;
14
use Psr\Log\LoggerInterface;
15
16
/**
17
 * Class Api.
18
 */
19
class Api
20
{
21
    /**
22
     * @var DummyLogger|LoggerInterface
23
     */
24
    protected $logger;
25
    /**
26
     * @var
27
     */
28
    private $client;
29
    /**
30
     * @var
31
     */
32
    private $auth;
33
34
    /**
35
     * @param LoggerInterface $logger
36
     */
37 2
    public function __construct(LoggerInterface $logger = null)
38
    {
39 2
        if ($logger === null) {
40 2
            $logger = new DummyLogger();
41
        }
42 2
        $this->logger = $logger;
43 2
    }
44
45
    /**
46
     * @param string $data
47
     *
48
     * @throws MethodNotFound | MissingMandatoryField
49
     *
50
     * @return bool|CallbackMethods
51
     */
52 1
    public function getCallbackMethod(string $data)
53
    {
54 1
        $data = \GuzzleHttp\json_decode($data);
55 1
        if (empty($data->method)) {
56
            return false;
57
        }
58
59 1
        $class = '\leocata\M1\Methods\Callback\\'.ucfirst($data->method);
60
61 1
        if (!class_exists($class)) {
62
            throw new MethodNotFound(sprintf(
63
                'The method "%s" not found, please correct',
64
                $class
65
            ));
66
        }
67
68
        /** @var \leocata\M1\Abstracts\CallbackMethods $method */
69 1
        $method = new $class();
70 1
        $method->import($data->params ?? new \stdClass());
71
72 1
        return $method;
73
    }
74
75
    /**
76
     * Performs the request to the Api servers.
77
     *
78
     * @param RequestMethods $method
79
     *
80
     * @return RequestMethods
81
     */
82
    public function sendRequest(RequestMethods $method)
83
    {
84
        $this->client = new HttpClient($this->auth);
85
        $response = $this->client->getResponseContent($method->getRequestString());
86
        if (!empty($response)) {
87
            $method->setResult($response);
88
        }
89
90
        return $method;
91
    }
92
93
    /**
94
     * Quick send new message.
95
     *
96
     * @param $sessionId
97
     * @param $destination
98
     * @param $code
99
     * @param $type
100
     * @param $content
101
     * @return RequestMethods
102
     */
103
    public function sendMessage($sessionId, $destination, $code, $type, $content)
104
    {
105
        $message = new SendMessage();
106
        $message->sessionid = $sessionId;
107
        $message->dest = $destination;
108
        $message->code = $code;
109
        $message->code = $type;
110
        $message->code = $content;
111
112
        return $this->sendRequest($message);
113
    }
114
115
    /**
116
     * Quick send message delivery status.
117
     *
118
     * @param $sessionId
119
     * @param $messageId
120
     *
121
     * @return RequestMethods
122
     */
123
    public function messageDelivered($sessionId, $messageId)
124
    {
125
        $messDelivered = new MessageDelivered();
126
        $messDelivered->sessionid = $sessionId;
127
        $messDelivered->messageid = $messageId;
128
129
        return $this->sendRequest($messDelivered);
130
    }
131
132
    /**
133
     * Send message type indicator.
134
     *
135
     * @param $sessionId
136
     * @param $userId
137
     *
138
     * @return RequestMethods
139
     */
140
    public function messageTyped($sessionId, $userId)
141
    {
142
        $messageTyped = new MessageTyped();
143
        $messageTyped->sessionid = $sessionId;
144
        $messageTyped->userid = $userId;
145
146
        return $this->sendRequest($messageTyped);
147
    }
148
149
    /**
150
     * Send contact Accept.
151
     *
152
     * @param $userId
153
     * @param $message
154
     * @param $state
155
     *
156
     * @return RequestMethods
157
     */
158
    public function contactAccept($userId, $message, $state)
159
    {
160
        $contactAccept = new ContactAccept();
161
        $contactAccept->userid = $userId;
162
        $contactAccept->message = $message;
163
        $contactAccept->state = $state;
164
165
        return $this->sendRequest($contactAccept);
166
    }
167
168
    /**
169
     * @return Authorization
170
     */
171
    public function getAuth() : Authorization
172
    {
173
        return $this->auth;
174
    }
175
176
    /**
177
     * @param mixed Authorization
178
     */
179
    public function setAuth(Authorization $auth)
180
    {
181
        $this->auth = $auth;
182
    }
183
}
184