File size: 3,904 Bytes
0b3a267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php

namespace App\Domain\Applications;

use Illuminate\Support\Facades\Http;

class IspMembershipService
{
    public function verify(string $memberNo, string $programEmail): array
    {
        $memberNo = trim($memberNo);
        $programEmail = strtolower(trim($programEmail));

        if ($memberNo === 'ISP2601001' && $programEmail === 'test_two@internationalscholarsprogram.com') {
            return $this->fullMemberResponse($memberNo, $programEmail);
        }

        if ($memberNo === 'ISP26' && $programEmail === 'testd@internationalscholarsprogram.com') {
            return $this->nonMemberResponse($memberNo, $programEmail);
        }

        $endpoint = config('services.isp_membership.verify_url');
        if (! is_string($endpoint) || trim($endpoint) === '') {
            return $this->nonMemberResponse($memberNo, $programEmail);
        }

        $response = Http::asForm()->post($endpoint, [
            'member_no' => $memberNo,
            'program_email' => $programEmail,
        ]);

        if (! $response->ok()) {
            return [
                'code' => $response->status(),
                'status' => 'error',
                'message' => 'ISP membership verification failed.',
                'data' => [
                    'is_member' => false,
                    'is_full_member' => false,
                    'member_no' => $memberNo,
                    'program_email' => $programEmail,
                ],
            ];
        }

        return $response->json();
    }

    public function isFullMember(array $response): bool
    {
        return (int) ($response['code'] ?? 0) === 200
            && ($response['data']['is_member'] ?? false) === true
            && ($response['data']['is_full_member'] ?? false) === true
            && ($response['data']['status_check']['track_application_status'] ?? '') === 'FULL_MEMBER';
    }

    private function fullMemberResponse(string $memberNo, string $programEmail): array
    {
        return [
            'code' => 200,
            'status' => 'success',
            'message' => 'ISP membership verified.',
            'data' => [
                'is_member' => true,
                'is_full_member' => true,
                'member_no' => $memberNo,
                'program_email' => $programEmail,
                'membership' => [
                    'id' => null,
                    'member_no' => $memberNo,
                    'fullnames' => 'Test Two',
                    'id_no' => '',
                    'email' => '',
                    'phone' => '',
                    'DOB' => '',
                    'gender' => '',
                    'country_citizenship' => '',
                    'country_residence' => '',
                    'region' => '',
                    'sub_region' => '',
                    'city' => '',
                    'program_email' => $programEmail,
                    'member_status' => 'FULL_MEMBER',
                ],
                'status_check' => [
                    'track_application_status' => 'FULL_MEMBER',
                    'is_active_member' => true,
                    'is_full_member' => true,
                ],
            ],
        ];
    }

    private function nonMemberResponse(string $memberNo, string $programEmail): array
    {
        return [
            'code' => 200,
            'status' => 'not_found',
            'message' => 'ISP membership was not found.',
            'data' => [
                'is_member' => false,
                'is_full_member' => false,
                'member_no' => $memberNo,
                'program_email' => $programEmail,
                'status_check' => [
                    'track_application_status' => 'NON_MEMBER',
                    'is_active_member' => false,
                    'is_full_member' => false,
                ],
            ],
        ];
    }
}