• File: UserController.php
  • Full Path: /var/www/imalipartnersapi/app/Http/Controllers/UserController.php
  • Date Modified: 02/07/2023 8:01 PM
  • File size: 53.91 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\AmountGenerate;
use App\Bank\MasterAccount;
use App\Bank\Payment;
use App\Classes\GenerateToken;
use App\Classes\CurrentPassword;
use App\Classes\Kyc;
use App\Classes\Record;
use App\Classes\SendSMS;
use App\Classes\SendSMSSislog;
use App\Classes\SmsManager;
use App\Classes\TransactionGeneration;
use App\Credelec;
use App\Imali\BankConection;
use App\Imali\ImaliAccount;
use App\Imali\RechargeImaliAccount;
use App\Log;
use App\Mail\Carregamento;
use App\PendingRecharge;
use App\PhoneValidation;
use App\PurchaseVoucher;
use App\ReverteImaliAccount;
use App\Rules\SamePassword;
use App\SendMoneyB2B;
use App\SendMoneyImaliMpesa;
use App\TransferHistory;
use App\User;
use App\Water;
use Carbon\Carbon;
use Illuminate\Http\Request;
use abdulmueid\mpesa\interfaces\ConfigInterface;
use abdulmueid\mpesa\interfaces\TransactionInterface;
use abdulmueid\mpesa\interfaces\TransactionResponseInterface;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use Webpatser\Uuid\Uuid;
use Paymentsds\MPesa\Client;
use DB;

class UserController extends Controller
{
   protected SmsManager $smsManager;

    public function __construct()
    {
        $this->smsManager = new SmsManager();
    }

    public function hideAndShowBalance(Request $request)
    {
        $user = User::find($request->user()->id);

        if ($user) {

            if ($user->balance_visibility == false) {
                $user->update(['balance_visibility' => true]);
                return response()->json(['message' => 'Actualizado com Sucesso para Verdadeiro'], 200);
            } else {
                $user->update(['balance_visibility' => false]);
                return response()->json(['message' => 'Actualizado com Sucesso para Falso'], 200);
            }
        } else {

            return response()->json(['message' => 'Utilizador não encontrado'], 400);
        }


    }

    public function validatePin(Request $request)
    {

        $this->validate($request, [
            'pin' => 'required|min:4'
        ]);

        if (Hash::check($request->pin, $request->user()->pin)) {
            return response()->json(['message' => 'ok'], 200);
        } else {
            return response()->json(['message' => 'Pin Incorrecto'], 405);
        }
    }

    public function getMyMonthConsuming(Request $request)
    {
        $currentMonth = date('m');
//        $data = DB::table("items")
//            ->whereRaw('MONTH(created_at) = ?',[$currentMonth])
//            ->get();

//        $data = Item::select('*')
//            ->whereMonth('created_at', Carbon::now()->month)
//            ->get();

        $voucher = PurchaseVoucher::query()
            ->whereRaw('MONTH(created_at) = ?', [$currentMonth])
            ->where('user_id', $request->user()->id)
            ->sum('price');

        $transfer = TransferHistory::query()
            ->whereRaw('MONTH(created_at) = ?', [$currentMonth])
            ->where('user_id', $request->user()->id)
            ->where('user_status', 'payer')
            ->sum('amount');

        $payments = Payment::query()
            ->whereRaw('MONTH(created_at) = ?', [$currentMonth])
            ->where('sender_id', $request->user()->id)
            ->sum('amount');

        $credelec = Credelec::query()
            ->whereRaw('MONTH(created_at) = ?', [$currentMonth])
            ->where('user_id', $request->user()->id)
            ->sum('amount');

        $water = Water::query()
            ->whereRaw('MONTH(created_at) = ?', [$currentMonth])
            ->where('user_id', $request->user()->id)
            ->sum('purchaseValue');


        return response()->json(['water' => $water, 'voucher' => $voucher, 'transfer' => $transfer, 'payments' => $payments, 'credelec' => $credelec]);

    }

    public function getUser()
    {
//        $user = User::query()
//            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
//            ->where('users.id', auth()->user()->id)
//            ->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference')
//            ->first();

        $user = ImaliAccount::query()
            ->join('users', 'imali_accounts.user_id', '=', 'users.id')
            ->join('imali_account_configs', 'imali_accounts.imali_account_config', '=', 'imali_account_configs.id')
            ->where('users.id', auth()->user()->id)
            ->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference', 'imali_account_configs.nr_transaction', 'imali_account_configs.max_value_operation', 'imali_account_configs.level')
            ->first();

        $user->makeHidden(['id', 'profile', 'password', 'pin', 'firebase_token', 'created_at', 'updated_at'
            , 'phone_reference', 'user_id', 'bi', 'document_id', 'remember_token', 'email_verified_at']);

        return response()->json($user);

    }

    public function getMyImaliAccount($id)
    {

        $imali = ImaliAccount::query()->where('user_id', $id)->first();
        return response()->json($imali);
    }

    public function rechargeByReference(Request $request)
    {

        $imaliAccount = ImaliAccount::query()->where('reference', $request->reference)->first();
        $transactionString = new TransactionGeneration();

        $user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id')
            ->where('users.id', $imaliAccount->user_id)
            ->select('users.*')
            ->first();

        $kyc = new Kyc();
        $kyckCheck = $kyc->checkRecharge($request);

        if ($kyckCheck) {
            return $kyckCheck;
        } else {
            if ($imaliAccount) {
                $balanceActual = $imaliAccount->balance + $request->amount;

                $masterAccount = MasterAccount::find(2);
                $recharge = RechargeImaliAccount::create([
                    'imali_account_id' => $imaliAccount->id,
                    'transaction_id' => $transactionString->generateTransaction(),
                    'amount' => $request->amount,
                    'last_balance' => $imaliAccount->balance,
                    'balance' => $balanceActual,
                    'recharge_way' => 'Agente i.Mali 0001',
                    'estado' => 'sucesso',
                    'estado_color' => '#388E3C',
                    'master_account_id' => $masterAccount->id
                ]);

                $masterBalance = $masterAccount->balance + $request->amount;

                $masterAccount->update(['balance' => $masterBalance]);

                if ($recharge) {

                    $sms = new SendSMSSislog();
                    $imaliAccount->update(['balance' => $balanceActual]);

                    $notification = array(
//                        'icon' => 'ic_imali_logo_verde_01',
                        'icon' => 'ic_i_mali_cover',
                        'title' => 'Carregamento ' . $recharge->amount . ' MT',
                        'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number,
                        'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS',
//                            'color' => '#008577'
                        'color' => '#ffffff'
                    );

                    $data = array(
                        'transaction' => $recharge->transaction_id,
                        'name' => $user->name,
                        'amount' => (double)$recharge->amount,
                        'phone' => $user->phone,
                        'reference' => $imaliAccount->reference,
                        'data' => $recharge->created_at,
                        'estado' => $recharge->estado,
                        'recharge_way' => $recharge->recharge_way,
                        'terminal' => 'firebase'
                    );

                    $this->pushNotifification($user->firebase_token, $notification, $data);
                    $this->smsManager->sendSMSForUserRecharge($recharge);
//                    $sms->sendSMSForUserRecharge($recharge);
                }

                if ($recharge) {
//                    Mail::to($user->email)->send(new Carregamento($recharge));
                }
                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number,
                    'details' => $user->name . ' ' . $user->last_name,
                    'operation' => 'Recharge by Reference',
                    'status' => 'success',
                    'user_id' => $request->user()->id
                ]);

                if ($recharge) {
                    return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
                }
            }
        }
    }

    public function rechargeByReference2(Request $request)
    {
//        return $request->all();
        foreach ($request->contentData as $requestData) {
            $imaliAccount = ImaliAccount::query()->where('reference', $requestData['payment_reference'])->first();

//            if ($imaliAccount) {
//
//            } else {
//                return response()->json(['message' => 'Referencia Inválida'], 400);
//            }
            if ($imaliAccount) {
                $transactionString = new TransactionGeneration();

                $user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id')
                    ->where('users.id', $imaliAccount->user_id)
                    ->select('users.*')
                    ->first();

                $balanceActual = $imaliAccount->balance + $requestData['paid_amount'];

                $masterAccount = MasterAccount::find(2);
                $recharge = RechargeImaliAccount::create([
                    'imali_account_id' => $imaliAccount->id,
                    'transaction_id' => $transactionString->generateTransaction(),
                    'amount' => $requestData['paid_amount'],
                    'last_balance' => $imaliAccount->balance,
                    'balance' => $balanceActual,
                    'recharge_way' => 'Banco',
                    'estado' => 'sucesso',
                    'estado_color' => '#388E3C',
                    'master_account_id' => $masterAccount->id,
                    'content_id' => $requestData['content_id']
                ]);

                $masterBalance = $masterAccount->balance + $requestData['paid_amount'];

                $masterAccount->update(['balance' => $masterBalance]);

                if ($recharge) {
                    $sms = new SendSMS();
                    $imaliAccount->update(['balance' => $balanceActual]);

                    $notification = array(
                        'icon' => 'ic_imali_logo_verde_01',
//                        'icon' => 'ic_i_mali_cover',
                        'title' => 'Carregamento ' . $recharge->amount . ' MT',
                        'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number,
//                        'click_action' => 'com.imali.payapp.payment_TRANSFER_DETAILS',
                        'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS',
//                            'color' => '#008577'
                        'color' => '#ffffff'
                    );
                    $data = array(
                        'transaction' => $recharge->transaction_id,
                        'name' => $user->name,
                        'amount' => (double)$recharge->amount,
                        'phone' => $user->phone,
                        'reference' => $imaliAccount->reference,
                        'data' => $recharge->created_at,
                        'estado' => $recharge->estado,
                        'recharge_way' => $recharge->recharge_way,
                        'terminal' => 'firebase'
                    );

                    $this->pushNotifification($user->firebase_token, $notification, $data);
                    $sms->sendSMSForUserRecharge($recharge);
                }

//                if ($recharge) {
////                    Mail::to($user->email)->send(new Carregamento($recharge));
//                }
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number,
//                        'details' => $user->name . ' ' . $user->last_name,
//                        'operation' => 'Recharge by Reference',
//                        'status' => 'success',
//                        'user_id' => $request->user()->id
//                    ]);

                if ($recharge) {
//                    return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
                }
            } else {
                PendingRecharge::create([
                    'reference' => $requestData['payment_reference'],
                    'amount' => $requestData['paid_amount'],
                    'content_id' => $requestData['content_id']
//                    'content_id' => $request->content_id
                ]);
//                return response()->json(['message' => 'Referencia inválida'], 400);
            }

//            $kyc = new Kyc();
////            $kyckCheck = $kyc->checkRecharge($request);
//            $kyckCheck = $kyc->checkRechargeByBank($requestData);
//
//            if ($kyckCheck) {
//                return $kyckCheck;
//            } else {
//
//
//            }
        }
        return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);


    }

    public function rechargeAccount2(Request $request)
    {
        $transactionString = new TransactionGeneration();

        $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
        $api_host = "api.sandbox.vm.co.mz";
        $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
        $origin = "*";
        $service_provider_code = "171717";

        $config = new \abdulmueid\mpesa\Config($public_key, $api_host, $api_key, $origin, $service_provider_code, '', '');
        $transaction = new \abdulmueid\mpesa\Transaction($config);
        $msisdn = '258' . $request->phone;
        $amount = $request->amount;
        $reference = 'T12344C';
//        $third_party_reference = '111PA2D';
        $third_party_reference = $transactionString->generateTransaction();

        $user = User::query()->where('user_id', $request->user_id)->first();

        $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();

        if ($imaliAccount) {
            $payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference);
            if ($payment->getCode() == 'INS-0') {
                if ($imaliAccount) {
                    $balanceActual = $imaliAccount->balance + $request->amount;

                    $masterAccount = MasterAccount::find(1);
                    $recharge = RechargeImaliAccount::create([
                        'imali_account_id' => $imaliAccount->id,
                        'transaction_id' => $transactionString->generateTransaction(),
                        'amount' => $request->amount,
                        'last_balance' => $imaliAccount->balance,
                        'balance' => $balanceActual,
                        'recharge_way' => 'M-pesa' . $request->phone,
                        'estado' => 'sucesso',
                        'estado_color' => '#388E3C',
                        'master_account_id' => $masterAccount->id
                    ]);


                    $masterBalance = $masterAccount->balance + $request->amount;

                    $masterAccount->update(['balance' => $masterBalance]);

                    if ($recharge) {
                        $imaliAccount->update(['balance' => $balanceActual]);

                        $log = new Record();
                        $log->createLog([
                            'description' => $imaliAccount->account_number . '  ' . $user->name . ' ' . $user->last_name,
                            'details' => 'Carregamento, feito com Sucesso',
                            'operation' => 'Recharge by M-pesa',
                            'status' => 'success',
                            'user_id' => $request->user()->id
                        ]);
                        return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200);
                    }
                }

            }
            if ($payment->getCode() == 'INS-2006') {

                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
                    'details' => 'Saldo Insuficiente',
                    'operation' => 'Recharge by M-pesa',
                    'status' => 'Error',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Saldo Insuficiente'], 422);
            }
            if ($payment->getCode() == 'INS-9') {

                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
                    'details' => 'Excedeu o tempo limite de transacção',
                    'operation' => 'Recharge by M-pesa',
                    'status' => 'Error',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408);
            }
            if ($payment->getCode() == 'INS-9') {

                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
                    'details' => 'Valor inválido',
                    'operation' => 'Recharge by M-pesa',
                    'status' => 'Error',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Valor inválido'], 400);
            }
            if ($payment->getCode() == 'INS-995') {


                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
                    'details' => 'Conta Mpesa com Problemas',
                    'operation' => 'Recharge by M-pesa',
                    'status' => 'Error',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Conta Mpesa com Problemas'], 400);
            }
            if ($payment->getCode() == 'INS-996') {

                $log = new Record();
                $log->createLog([
                    'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
                    'details' => 'Este número nao tem conta Mpesa',
                    'operation' => 'Recharge by M-pesa',
                    'status' => 'Error',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400);
            }
        }


    }

    public function rechargeAccount(Request $request)
    {
        $transactionString = new TransactionGeneration();

        $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
        $api_host = "api.sandbox.vm.co.mz";
        $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
        $origin = "*";
        $service_provider_code = "171717";

        $reference = 'T12344C';

        $third_party_reference = $transactionString->generateTransaction();


        $client = new Client([
            'apiKey' => $api_key,             // API Key
            'publicKey' => $public_key,          // Public Key
            'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
        ]);

        $paymentData = [
//            'from' => '+258845030902',       // input_CustomerMSISDN
            'from' => '258' . $request->phone,       // input_CustomerMSISDN
//            'from' => $request->phone,       // input_CustomerMSISDN
            'reference' => '111PA2D',      // input_ThirdPartyReference
            'transaction' => $third_party_reference, // input_TransactionReference
            'amount' => $request->amount             // input_Amount
        ];


        $user = User::query()->where('user_id', $request->user_id)->first();

        $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();

        if ($imaliAccount) {
//            $payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference);

//            $results = $client->receive($paymentData);
            $results = $client->receive($paymentData);

            if ($results->success) {
                // Handle success
//                if ($result->getCode() == 'INS-0') {
//                return response()->json($result);
                if ($imaliAccount) {
                    $balanceActual = $imaliAccount->balance + $request->amount;

                    $masterAccount = MasterAccount::find(1);
                    $recharge = RechargeImaliAccount::create([
                        'imali_account_id' => $imaliAccount->id,
                        'transaction_id' => $transactionString->generateTransaction(),
                        'amount' => $request->amount,
                        'last_balance' => $imaliAccount->balance,
                        'balance' => $balanceActual,
                        'recharge_way' => 'M-pesa' . $request->phone,
                        'estado' => 'sucesso',
                        'estado_color' => '#388E3C',
                        'master_account_id' => $masterAccount->id
                    ]);


                    $masterBalance = $masterAccount->balance + $request->amount;

                    $masterAccount->update(['balance' => $masterBalance]);

                    if ($recharge) {
                        $imaliAccount->update(['balance' => $balanceActual]);

                        $log = new Record();
                        $log->createLog([
                            'description' => $imaliAccount->account_number . '  ' . $user->name . ' ' . $user->last_name,
                            'details' => 'Carregamento, feito com Sucesso',
                            'operation' => 'Recharge by M-pesa',
                            'status' => 'success',
                            'user_id' => $request->user()->id
                        ]);

                        return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200)->header('Content-Type', 'application/json');
                    }
                }

//                }
            } else {
//                return response()->json($result);
                // Handle failure

//                if ($result->getCode() == 'INS-2006') {
//
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
//                        'details' => 'Saldo Insuficiente',
//                        'operation' => 'Recharge by M-pesa',
//                        'status' => 'Error',
//                        'user_id' => $request->user()->id
//                    ]);
//
//                    return response()->json(['message' => 'Saldo Insuficiente'], 422);
//                }
//                if ($result->getCode() == 'INS-9') {
//
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
//                        'details' => 'Excedeu o tempo limite de transacção',
//                        'operation' => 'Recharge by M-pesa',
//                        'status' => 'Error',
//                        'user_id' => $request->user()->id
//                    ]);
//
//                    return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408);
//                }
//                if ($result->getCode() == 'INS-9') {
//
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
//                        'details' => 'Valor inválido',
//                        'operation' => 'Recharge by M-pesa',
//                        'status' => 'Error',
//                        'user_id' => $request->user()->id
//                    ]);
//
//                    return response()->json(['message' => 'Valor inválido'], 400);
//                }
//                if ($result->getCode() == 'INS-995') {
//
//
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
//                        'details' => 'Conta Mpesa com Problemas',
//                        'operation' => 'Recharge by M-pesa',
//                        'status' => 'Error',
//                        'user_id' => $request->user()->id
//                    ]);
//
//                    return response()->json(['message' => 'Conta Mpesa com Problemas'], 400);
//                }
//                if ($result->getCode() == 'INS-996') {
//
//                    $log = new Record();
//                    $log->createLog([
//                        'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
//                        'details' => 'Este número nao tem conta Mpesa',
//                        'operation' => 'Recharge by M-pesa',
//                        'status' => 'Error',
//                        'user_id' => $request->user()->id
//                    ]);
//
//                    return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400);
//                }
            }
        }


    }


    public function bankConnections()
    {
        $banks = BankConection::all();

        return response()->json(['data' => $banks], 200);
    }

    public function users()
    {
        $users = User::all();
        return response()->json(['data' => $users], 200);
    }

    public function resendCode(Request $request)
    {
        $token = new GenerateToken();


        $validate = PhoneValidation::query()->where('phone', $request->phone)->count();
        $phoneValidate = PhoneValidation::query()->where('phone', $request->phone)->first();

        if ($validate === 0) {
            $data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()];
            $sms = new  SendSMS();
            $save = PhoneValidation::create([
                'phone' => $request->phone,
                'expire_at' => now(),
                'duration' => 5,
                'codigo' => $data['codigo'],
                'is_Validated' => 1
            ]);
            $sent = $sms->verifyUser($data);
            if ($save) {

                $log = new Record();
                $log->createLog([
                    'description' => $request->phone . '  ' . $data['codigo'],
                    'details' => 'Código de Verificação enviado com sucesso!',
                    'operation' => 'Resend Verification code',
                    'status' => 'Success',
                    'user_id' => $request->user()->id
                ]);

                return response()->json(['message' => 'Código de Verificação enviado com sucesso!'], 200);
            }
        } else {
            $validate = PhoneValidation::query()->where('phone', $request->phone)->first();
//            $save = $validate->update(['codigo' => $data['codigo']]);
            if ($validate) {
                $data = ['phone' => $request->phone, 'codigo' => $validate->phone];
                $sms = new  SendSMS();
                $sms->verifyUser($data);
                return response()->json(['message' => 'Código de Verificação reenviado com sucesso!', 'codigo' => $data['codigo']], 200);
            }
        }

    }


    public function verifyUserNumber(Request $request)
    {
//        $firstReplace= str_replace(' ', '',$request->phone);
//        $request['phone'] = str_replace('-', '',$firstReplace);
        $this->validate($request, [
            'name' => 'required',
            'phone' => 'required|unique:users|min:9',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:8|confirmed',
            'bi' => 'required|min:13'
        ], [
            'email.required' => 'O Campo Email é de carácter Obrigatório',
            'email.unique' => 'Este Email já está em uso',
            'phone.required' => 'O Número do celular é obrigatório',
            'phone.unique' => 'O Número do celular já está em uso',
            'phone.min' => 'O Campo Celular deve ter 9 dígitos',
            'name.required' => 'O Campo Nome é obrigatório',
            'bi.required' => 'O campo Bi é Obrigatório',
//            'bi.min'=>'O campo Bi ter 13 dígitos',
            'password.required' => 'O Campo Senha é obrigatório',
            'password.confirmed' => 'Senhas incompatíveis',
            'password.min' => 'A senha deve ter 8 digitos no mínimo'
        ]);

        $token = new GenerateToken();
        $data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()];

        $this->smsManager->smsVerifyUser($data);

        $validate = PhoneValidation::query()->where('phone', '=', $request->phone)->count();

        if ($validate === 0) {
            $save = PhoneValidation::create([
                'phone' => $request->phone,
                'country_code' => $request->country_code,
                'expire_at' => now(),
                'duration' => 2,
                'codigo' => $data['codigo'],
                'is_Validated' => 1
            ]);
            if ($save) {
                return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!'], 200);
            }
        } else {
            $validate = PhoneValidation::query()->where('phone', $request->phone)->first();
            $save = $validate->update(['codigo' => $data['codigo']]);
            if ($save) {
                return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!', 'codigo' => $data['codigo']], 200);
            }
        }
    }

    public function checkCodigo(Request $request)
    {
        try {
            $validate = PhoneValidation::query()->where('phone', $request->phone)->where('codigo', $request->codigo)->count();
            if ($validate > 0) {

                $log = new Record();
                $log->createLog([
                    'description' => $request->phone,
                    'details' => 'Celular Verificado com Successo!',
                    'operation' => 'Check Phone Validation',
                    'status' => 'Success',
                    'user_id' => 1
                ]);
                return response()->json(['message' => 'Celular Verificado com Successo!'], 200);
            } else {

                $log = new Record();
                $log->createLog([
                    'description' => $request->phone,
                    'details' => 'Código inválido',
                    'operation' => 'Check Phone Validation',
                    'status' => 'Error',
                    'user_id' => 1
                ]);

                return response()->json(['message' => 'Código inválido'], 400);
            }
        } catch (Exception $exception) {
            return response()->json($exception);
        }
    }

    public function getUsers()
    {
        return response()->json(['users' => User::all()]);
    }

    public function getImaliAccounts()
    {
//        $imali = ImaliAccount::query()
//            ->join('users', 'users.id', '=', 'imali_accounts.user_id')
//            ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
//            ->leftJoin('user_documents', 'user_documents.user_id', '=', 'imali_accounts.user_id')
////            ->where('user_documents.status', 'actualizado')
////            ->leftJoin('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
//            ->select('imali_accounts.*', 'imali_account_configs.level', 'users.*',
//                'user_documents.image_front', 'user_documents.image_back', 'user_documents.image_selfie', 'user_documents.status as document_status', 'user_documents.message as document_message',
//                'user_documents.fathers_name', 'user_documents.mothers_name', 'user_documents.issue_date', 'user_documents.expiration_date', 'user_documents.document_type', 'user_documents.issuing_place',
//                'user_documents.document_number', "user_documents.nationality", 'user_documents.place_of_birth', 'user_documents.address1', 'user_documents.address2', 'user_documents.marital_status',
//                'user_documents.sex', 'user_documents.birthdate as document_birthdate', 'user_documents.height', 'user_documents.created_at as document_created_at', 'user_documents.updated_at as document_updated_at')
//            ->paginate(10);

        $imali = User::query()
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
            ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
            ->leftJoin('user_documents', 'user_documents.id', '=', 'users.document_id')
//            ->where('user_documents.status', 'actualizado')
//            ->leftJoin('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
            ->select('imali_accounts.*', 'imali_account_configs.level', 'users.*',
                'user_documents.image_front', 'user_documents.image_back', 'user_documents.image_selfie', 'user_documents.status as document_status', 'user_documents.message as document_message',
                'user_documents.fathers_name', 'user_documents.mothers_name', 'user_documents.issue_date', 'user_documents.expiration_date', 'user_documents.document_type', 'user_documents.issuing_place',
                'user_documents.document_number', "user_documents.nationality", 'user_documents.place_of_birth', 'user_documents.address1', 'user_documents.address2', 'user_documents.marital_status',
                'user_documents.sex', 'user_documents.birthdate as document_birthdate', 'user_documents.height', 'user_documents.created_at as document_created_at', 'user_documents.updated_at as document_updated_at')
            ->paginate(10);

        return response()->json($imali);
    }

    public function updateUserData(Request $request)
    {

        $user = $imali = ImaliAccount::query()
            ->join('users', 'users.id', '=', 'imali_accounts.user_id')
            ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
            ->where('users.user_id', $request->user_id)
            ->first();

        if ($user) {

            $u = User::find($user->id);
            $u->update([
                'name' => $request->name,
                'last_name' => $request->last_name,
                'profile' => $request->profile,
                'status' => $request->status,
                'birthday' => $request->birthday,
                'bi' => $request->bi,
            ]);

            $kyc = ImaliAccount::query()->where('user_id', $user->id)->first();
            if ($kyc) {
                $kyc->update([
                    'imali_account_config' => $request->imali_account_config
                ]);
            }
            return response()->json(['message' => 'Dados do Cliente Actualizados com Sucesso!'], 200);
        }
    }

    public function updateUserDataMobile(Request $request)
    {
        $user = $request->user();

        if ($user) {

            $update = User::query()
                ->where('id', $user->id)
                ->update([
                    'name' => $request->name,
                    'last_name' => $request->last_name,
                    'bi' => $request->bi,
                    'birthday' => $request->birthday,
                ]);
            if ($update) {
                return response()->json(['message' => 'Dados Actualizados com Sucesso'], 200);
            }
        }
    }

    public function changePassword(Request $request)
    {

        $this->validate($request, [
            'current_password' => ['required', new CurrentPassword()],
//            'new_password' => 'required|min:8|confirmed',
            'new_password' => ['required', 'min:8', 'confirmed'],
            'new_password_confirmation' => 'required|min:8',
        ], [
                'current_password.required' => 'O Campo Senha Actual é Obrigatório',
                'new_password.required' => 'O Campo Nova Senha é Obrigatório',
                'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório',
                'new_password.confirmed' => 'Senhas incompatíveis',
                'current_password.min' => 'A senha deve ter 8 digitos no mínimo',
                'new_password.min' => 'A senha deve ter 8 digitos no mínimo',
                'new_password_confirmation.min' => 'A senha deve ter 8 digitos no mínimo'
            ]
        );


        if (Hash::check($request->current_password, $request->user()->password)) {

            $request->user()->update([
                'password' => bcrypt($request->new_password)
            ]);

            return response()->json(['message' => 'Senhas Compativeis'], 200);
        } else {
            return response()->json(['message' => 'Senha Antiga Inválida'], 404);
        }

    }

    public function uploadPhoto(Request $request)
    {
        return $request->all();
    }

    public function disableUser($id)
    {
        $user = User::query()->where('user_id', $id)->first();


        if ($user->status === 1) {
            $update = $user->update(['status' => 0]);
            return response()->json(['message' => 'Utilizador Bloqueado com Sucesso'], 200);
        } else {
            return response()->json(['message' => 'Utilizador Activo com Sucesso'], 200);
        }

    }

    public function generateAmount(Request $request)
    {
        $imali = ImaliAccount::query()->where('user_id', $request->user()->id)->first();

        $save = AmountGenerate::create([
            'user_id' => $request->user()->id,
            'transaction' => Uuid::generate()->string,
            'amount' => $request->amount,
            'account_number' => $imali->account_number,
            'qrcode' => '',
            'firebase_token' => $request->firebase_token
        ]);

//        $log = new Record();
//        $log->createLog([
//            'description' => $save->account_number . ' ' . $save->amount . ' ' . $save->transaction,
//            'details' => 'Codigo gerado com Sucesso',
//            'operation' => 'Generate Amount to Receiver By Qrcode',
//            'status' => 'Success',
//            'user_id' => $request->user()->id
//        ]);

        return response()->json(['message' => 'Codigo gerado com Sucesso', 'transaction' => $save->transaction, 'account_number' => $save->account_number, 'amount' => $save->amount], 200);
    }

    public function getClientDataForPayment($transaction)
    {

        $client = AmountGenerate::query()
            ->join('users', 'users.id', '=', 'amount_generates.user_id')
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id')
            ->where('amount_generates.transaction', $transaction)
//            ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number')
            ->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number')
//            ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number')
            ->first();


        if ($client) {
            return response()->json($client, 200);
        } else {

            $user = ImaliAccount::query()
                ->join('users', 'users.id', '=', 'imali_accounts.user_id')
//            ->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
                ->where('imali_accounts.account_number', $transaction)
                ->select('users.name', 'imali_accounts.account_number')
                ->first();

            return response()->json($user, 200);
        }


    }

    public function getClientAccount($aacount)
    {

        $client = AmountGenerate::query()
            ->join('users', 'users.id', '=', 'amount_generates.user_id')
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id')
            ->where('amount_generates.transaction', $aacount)
//            ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number')
            ->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number')
//            ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number')
            ->first();

        return response()->json($client, 200);

    }

    public function checkPin(Request $request)
    {
        $user = User::find($request->user()->id);

        if (Hash::check($request->pin, $user->pin)) {
            return response()->json(['message' => 'Pin Verificado'], 201);
        } else {
            return response()->json(['message' => 'Pin Incorrecto'], 400);
        }

    }

    public function getBalance(Request $request)
    {
//        return $request->all();
        $imali = ImaliAccount::query()
            ->join('users', 'users.id', '=', 'imali_accounts.user_id')
            ->where('users.phone', $request->phone)
            ->first();

        if ($imali) {
            return response()->json($imali);
        } else {
            return response()->json(['message' => 'Conta invalida']);
        }
    }

    public function updateFirebaseToken(Request $request)
    {

    }

    public function reverteTransaction(Request $request)
    {
        $transactionString = new TransactionGeneration();

        $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
        $api_host = "api.sandbox.vm.co.mz";
        $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
        $origin = "*";
        $service_provider_code = "171717";
        $reference = 'T12344C';


        $client = new Client([
            'apiKey' => $api_key,             // API Key
            'publicKey' => $public_key,          // Public Key
            'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
        ]);

        $transaction = RechargeImaliAccount::query()
            ->where('id', $request->id)
            ->where('transaction_id', $request->transaction)
            ->where('imali_account_id', $request->imali_account_id)
            ->first();

        $paymentData = [
            'reference' => 'T12344C',      // input_ThirdPartyReference
            'transaction' => $transaction->transaction_id, // input_TransactionReference
            'amount' => $transaction->amount             // input_Amount
        ];
        $transactionString = new TransactionGeneration();

        if ($transaction) {

            $results = $client->revert($paymentData);

            if ($results->success) {


                ReverteImaliAccount::create([
                    'transaction' => $transactionString->generateTransaction(),
                    'user_id' => $request->user()->id,
                    'imali_account_id' => $transaction->imali_account_id,
                    'recharge_imali_account_id' => $transaction->id
                ]);

                return response()->json(['message' => 'Transacção revertida com Sucesso'], 200);

            }
        }
    }

    public function sendMoneyImaliMpesa(Request $request)
    {
        $transactionString = new TransactionGeneration();

        $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
        $api_host = "api.sandbox.vm.co.mz";
        $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
        $origin = "*";
        $service_provider_code = "171717";

        $reference = 'T12344C';

        $third_party_reference = $transactionString->generateTransaction();


        $client = new Client([
            'apiKey' => $api_key,             // API Key
            'publicKey' => $public_key,          // Public Key
            'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
        ]);


        $paymentData = [
            'to' => '258' . $request->phone,         // input_CustomerMSISDN
            'reference' => 'T12344C',      // input_ThirdPartyReference
            'transaction' => $third_party_reference, // input_TransactionReference
            'amount' => $request->amount             // input_Amount
        ];


        $user = User::query()->where('user_id', $request->user_id)->first();

//        $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();
        $imaliAccount = ImaliAccount::query()->where('user_id', $request->user_id)->first();

        $total = ($request->amount + $request->amount * 0.3);

        if ($imaliAccount->balance >= $total) {

            $results = $client->send($paymentData);

            if ($results->success) {

                SendMoneyImaliMpesa::create([
                    'transaction' => $third_party_reference,
                    'fee' => ($request->amount * 0.3),
                    'fee_type' => '3%',
                    'amount' => $request->amount,
                    'imali_account' => $request->imali_account,
                    'admin_id' => $request->admin_id,
                    'user_id' => $request->user_id,
                    'phone' => $request->phone
                ]);
//                dd($results);

                return response()->json(['message' => 'Transacção ' . $results->data['transaction'] . ' efectuada com Sucesso'], 200);
            }

        }


    }


    public function sendMoneyB2B(Request $request)
    {
        $transactionString = new TransactionGeneration();

        $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
        $api_host = "api.sandbox.vm.co.mz";
        $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
        $origin = "*";
        $service_provider_code = "171717";

        $reference = 'T12344C';

        $third_party_reference = $transactionString->generateTransaction();


        $client = new Client([
            'apiKey' => $api_key,             // API Key
            'publicKey' => $public_key,          // Public Key
            'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
        ]);

//        979797

        $paymentData = [
            'to' => $request->entity,        // input_ReceiverPartyCode
            'reference' => '111PA2D',      // input_ThirdPartyReference
            'transaction' => $third_party_reference, // input_TransactionReference
            'amount' => $request->amount           // input_Amount
        ];


        $results = $client->send($paymentData);

        if ($results->success) {

            SendMoneyB2B::create([
                'entity' => $request->entity,
                'amount' => $request->amount,
                'admin_id' => $request->user()->id,
                'transaction' => $third_party_reference,
            ]);
        }

        return response()->json(['message' => 'Transacção efectuada com Sucesso'], 200);


    }

    public function sendSMS(Request $request)
    {
        $data = [$request->phone];
        $sms = new  SendSMS();
        $sent = $sms->sendMessageTest($data);

        return response($sent);

    }

    public function getContacts()
    {
        $contacts = User::query()->value('phone');
        return response()->json(['data' => $contacts]);
    }

    public function updateAvatar(Request $request)
    {
        $user = User::find($request->user()->id);

        if ($request->photo != null) {
            $exploded = explode(',', $request->photo);
            $decoded = base64_decode($exploded[0]);
//            if (Str::contains($exploded[0], 'jpeg')) {
            if (Str::contains($exploded[0], 'jpeg')) {
                $extention = 'jpg';
            } else {
                $extention = 'png';
            }
            $imageName = Str::random() . $user->id . '.' . $extention;

            $updateUser = $user->update([
//                'photo' => 'http://160.242.36.118:81/imaliapitest/public/images/avatar/' . $imageName
//                'photo' => 'http://160.242.35.226/imaliapi/public/images/avatar/' . $imageName
                'photo' => url('/') . '/images/avatar/' . $imageName
            ]);

            if ($updateUser) {
                $path = public_path() . '/images/avatar/' . $imageName;
                file_put_contents($path, $decoded);
            }
        }
//        return response()->json(['message' => 'Avatar Actualizado com Sucesso', 'photo' => $updateUser->photo]);
        return response()->json(['message' => 'Avatar Actualizado com Sucesso']);
    }

    public function getMyCredelec(Request $request)
    {

        $credelec = Credelec::query()
            ->where('user_id', $request->user()->id)
            ->orderByDesc('created_at')
            ->get();

        return response()->json(['data' => $credelec]);
    }

    public function getMyWater(Request $request)
    {

        $credelec = Water::query()
            ->where('user_id', $request->user()->id)
            ->orderByDesc('created_at')
            ->get();

        return response()->json(['data' => $credelec]);
    }

    public function pushNotifification($token, $notification = array(), $data = array())
    {
        $apiKey = 'AAAA8zVzEPQ:APA91bHl_DXB6UGb_6gZlmFnaLTQoANtX_OBjvl3nOy2bSlnFhxedvk6EhGj7cZoIvmlbKeCnqGxXbuyMH_rEPuhRXvuitXzo6Pfl2TMXLar1PlifXqEhYq6tS55UMrY2Kffzj-P_UH-';
        $fields = array('to' => $token, 'notification' => $notification, 'data' => $data);
        $headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json');
        $url = 'https://fcm.googleapis.com/fcm/send';

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
        $result = curl_exec($curl);
        curl_close($curl);

        return json_decode($result, true);

    }


}