<?php

use App\Models\System\Verification;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use Illuminate\Support\Facades\Log;

/**
 * Un mask phone from "+(993)-xx-xx-xx-xx"
 */
function unMaskPhone(string|int $phone): string
{
    return substr(str_replace(['+', '(', ')', '-', '_'], '', $phone), 3);
}

/**
 * Send a sms
 *
 * @return void
 */
function sendSMS(string|int $phone, string|int $message)
{
    $client = new Client();
    $headers = [
        'Content-Type' => 'application/json;charset=utf-8;',
        'Charset' => 'UTF-8',
    ];
    $body = 'JSON={
        "SendRequest": {
          "TerminalID": "Online_PANEL",
          "Version": "1",
          "Lang": "EN",
          "MobilePhone": "993'.$phone.'",
          "Text": "'.$message.'"
        }
    }';
    $request = new Request('POST', 'http://10.3.158.103:8080/kpsmsroute/online.request', $headers, $body);

    try {
        $res = $client->sendAsync($request)->wait();

        return $res->getBody();
    } catch (\Exception $e) {
        Log::error($e);
    }
}

/**
 * Send a sms verification code
 */
function sendSMSVerification(string|int $phone_number): ?Verification
{
    $phone_code = rand(10000, 99999);
    $verification = Verification::where(['username' => $phone_number])->first();
    $verification ? $verification->update(['code' => $phone_code]) : Verification::create(['username' => $phone_number, 'code' => $phone_code]);

    sendSMS($phone_number, 'Tassyklaýyş belgi: '.$phone_code);

    return $verification;
}
