• File: ComercianteController.php
  • Full Path: /var/www/imaliapi/app/Http/Controllers/ComercianteController.php
  • Date Modified: 08/15/2025 9:33 PM
  • File size: 45.14 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\Bank\Payment;
use App\Classes\Comerciante;
use App\Classes\GenerateImaliAccount;
use App\Classes\Record;
use App\Imali\ImaliAccount;
use App\Imali\MerchantAccount;
use App\Imali\MerchantContract;
use App\Imali\RamoActivity;
use App\Imali\RechargeImaliAccount;
use App\Store;
use App\StoreAmountGeneration;
use App\StoreConfig;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use QRCode;
use Webpatser\Uuid\Uuid;
use Ramsey\Uuid\Uuid as UuidStore;

class ComercianteController extends Controller
{
    public function getUserByImaliAccount($account_number)
    {
        $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', $account_number)
            ->first();

        $recharge = RechargeImaliAccount::query()
            ->join('imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
            ->where('imali_accounts.account_number', $account_number)
            ->get()
            ->last();

        return response()->json(['user' => $user, 'lastRecharge' => $recharge]);
    }

    public function getUserByImaliAccountPhoneOld($account_number)
    {
        $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', $account_number)
            ->select('users.name', 'imali_accounts.account_number')
            ->first();

        $recharge = RechargeImaliAccount::query()
            ->join('imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
            ->where('imali_accounts.account_number', $account_number)
            ->get()
            ->last();

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

    // todo --- NEW METHOD 2025 
    public function getUserByImaliAccountPhone($reference)
    {
        $ur = User::getAccount($reference);
        $user = User::getUserDetails($ur->user_id);

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

    public function getUserData($id)
    {
        $user = ImaliAccount::query()
            ->join('users', 'users.id', '=', 'imali_accounts.user_id')
            ->where('users.id', $id)
            ->first();
        return response()->json($user);
    }

    public function getRamoActivity()
    {
        $log = new Record();

        $ramo = RamoActivity::query()->orderBy('nome', 'asc')->get();

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

    public function saveLoja(Request $request)
    {
        if ($request->isXmlHttpRequest()) {
            return response()->json("Fe");
        }
        if ($request->isJson()) {

            $this->validate($request, [
                'name' => 'required',
                'email' => 'required',
                'nib' => 'required',
                'nuit' => 'required|string',
                'address' => 'required',
                // 'merchant_account_id' => 'required',
                'industry_activity' => 'required',
                'manager' => 'required',
                'username' => 'required',
                'manager_phone_number' => 'required|string',
                'mobile_phone' => 'required|string',
                'taxa' => 'required',
                'max_balance' => 'required',
                'nr_transaction' => 'required',
                'min_amount' => 'required',
                'max_amount' => 'required',
                'use_point_limit' => 'required',
            ]);

            $random = new GenerateImaliAccount();
            //            $number = $random->GenerateImaliAccountNumberAndStore();
            $number = $random->GenerateAccountNumber2024();
            // return $number;

            $response = Store::create([
                'name' => $request->name,
                'username' => $request->username,
                'nuit' => $request->nuit,
                'nib' => $request->nib,
                'address' => $request->address,
                'balance' => 0,
                'manager' => $request->manager,
                'manager_phone_number' => $request->manager_phone_number,
                'public_id' => Uuid::generate()->string,
                'mobile_phone' => $request->mobile_phone,
                'account_number' => $number,
                'email' => $request->email,
                'logo' => url('/') . '/imaliapi/public/images/comerciante/logo/store.png',
                'photo' => url('/') . '/imaliapi/public/images/comerciante/logo/store.png',
                'password' => Hash::make('12345678'),
                'user_client_id' => $request->user_client_id,
                'merchant_account_id' => $request->merchant_account_id,
                'business_account_id' => $request->business_account_id,
                //                'merchant_contract_id' => $request->$contrato->id,
                'industry_activity' => $request->industry_activity,
                'user_id' => $request->user()->id
            ]);
            $contrato = MerchantContract::create([
                'taxa' => $request->taxa,
                'max_balance' => $request->max_balance,
                'nr_transaction' => $request->nr_transaction,
                'status' => 'activo',
                'min_amount' => $request->min_amount,
                'max_amount' => $request->max_amount,
                'use_point' => true,
                'use_point_limit' => $request->use_point_limit,
                'user_id' => $request->user()->id,
                'merchant_account_id' => $request->merchant_account_id,
                'business_account_id' => $request->business_account_id,
                'store_id' => $response->id,
            ]);
            $response->update(['merchant_contract_id' => $contrato->id]);

            $storeConfig = StoreConfig::query()
                ->where('store_id', '=', $response->id)
                ->first();

            if (!$storeConfig) {
                StoreConfig::create([
                    'store_id' => $response->id
                ]);
            }

            if ($response) {
                $fileQrcode = $path = public_path('/images/comerciante/qrcode/loja' . '/' . $response->public_id . '.' . 'png');
                //                $response->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
                //                $response->update(['qrcode' => 'http://160.242.35.226/imaliapi/public/images/comerciante/qrcode/loja/' . $response->public_id . '.' . 'png']);
                $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/loja/' . $response->public_id . '.' . 'png']);
                \QRCode::text($response->public_id)
                    ->setOutfile($fileQrcode)
                    ->setSize(10)
                    ->setMargin(10)
                    ->png();

                return response()->json(['message' => 'Loja Adiconada com Sucesso'], 200);
            }
        }
    }


    public function saveBusinesStore(Request $request)
    {
        if ($request->isXmlHttpRequest()) {
            return response()->json("Fe");
        }
        if ($request->isJson()) {

            $this->validate($request, [
                'name' => 'required',
                'email' => 'required',
                'nib' => 'required',
                'nuit' => 'required|int',
                'address' => 'required',
                'business_account_id' => 'required',
                'industry_activity' => 'required',
                'manager' => 'required',
                'username' => 'required',
                'manager_phone_number' => 'required|string',
                'mobile_phone' => 'required|string',
                'taxa' => 'required',
                'max_balance' => 'required',
                'nr_transaction' => 'required',
                'min_amount' => 'required',
                'max_amount' => 'required',
                'use_point_limit' => 'required',
            ]);

            $random = new GenerateImaliAccount();
            //            $number = $random->GenerateImaliAccountNumberAndStore();
            $number = $random->GenerateAccountNumber2024();

            $response = Store::create([
                'name' => $request->name,
                'username' => $request->username,
                'nuit' => $request->nuit,
                'nib' => $request->nib,
                'address' => $request->address,
                'balance' => 0,
                'manager' => $request->manager,
                'manager_phone_number' => $request->manager_phone_number,
                'public_id' => Uuid::generate()->string,
                'mobile_phone' => $request->mobile_phone,
                'account_number' => $number,
                'email' => $request->email,
                'logo' => url('/') . '/imaliapi/public/images/comerciante/logo/store.png',
                'photo' => url('/') . '/imaliapi/public/images/comerciante/logo/store.png',
                'password' => Hash::make('12345678'),
                'user_client_id' => $request->user_client_id,
                'business_account_id' => $request->business_account_id,
                //                'merchant_contract_id' => $request->$contrato->id,
                'industry_activity' => $request->industry_activity,
                'user_id' => $request->user()->id
            ]);
            $contrato = MerchantContract::create([
                'taxa' => $request->taxa,
                'max_balance' => $request->max_balance,
                'nr_transaction' => $request->nr_transaction,
                'status' => 'activo',
                'min_amount' => $request->min_amount,
                'max_amount' => $request->max_amount,
                'use_point' => true,
                'use_point_limit' => $request->use_point_limit,
                'user_id' => $request->user()->id,
                'business_account_id' => $request->business_account_id,
                'store_id' => $response->id,
            ]);
            $response->update(['merchant_contract_id' => $contrato->id]);

            $storeConfig = StoreConfig::query()
                ->where('store_id', '=', $response->id)
                ->first();

            if (!$storeConfig) {
                StoreConfig::create([
                    'store_id' => $response->id
                ]);
            }

            if ($response) {
                $fileQrcode = $path = public_path('/images/comerciante/qrcode/loja' . '/' . $response->public_id . '.' . 'png');
                //                $response->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
                //                $response->update(['qrcode' => 'http://160.242.35.226/imaliapi/public/images/comerciante/qrcode/loja/' . $response->public_id . '.' . 'png']);
                $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/loja/' . $response->public_id . '.' . 'png']);
                \QRCode::text($response->public_id)
                    ->setOutfile($fileQrcode)
                    ->setSize(10)
                    ->setMargin(10)
                    ->png();

                return response()->json(['message' => 'Loja Adicionada com Sucesso'], 200);
            }
        }
    }

    public function generateQrcode2($id, $accountNumber)
    {

        $response = Store::query()
            ->where('id', $id)
            ->where('account_number', $accountNumber)
            ->first();
        if ($response) {

            $fileQrcode = $path = public_path('/images/comerciante/qrcode' . '/' . $response->public_id . '.' . 'png');
            //                $response->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
            //            $response->update(['qrcode' => 'http://160.242.35.226/imaliapi/public/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
            $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
            \QRCode::text($response->public_id)
                ->setOutfile($fileQrcode)
                ->setSize(10)
                ->setMargin(10)
                ->png();

            return response()->json(['message' => 'Gerado com Sucesso'], 200);
        } else {
            return response()->json(['message' => 'Falha ao Gerar o Qrcode. Erro Loja nao encontrada'], 400);
        }
    }

    // todo ---------- CFM
    public function generateQrcode(Request $request, $id, $accountNumber)
    {

        $response = Store::query()
            ->leftJoin('merchant_accounts', 'merchant_accounts.id', '=', 'stores.merchant_account_id')
            ->leftJoin('merchant_contracts', 'merchant_contracts.id', '=', 'stores.merchant_contract_id')
            ->where('stores.id', $id)
            ->where('stores.account_number', $accountNumber)
            ->select('stores.*', 'merchant_accounts.institution', 'merchant_contracts.min_amount')
            ->first();

        if (!$response) return response()->json(['message' => 'Falha ao Gerar o Qrcode. Erro Loja nao encontrada'], 400);

        if (!$response->qrcode_has_amount) {

            $fileQrcode = public_path('/images/comerciante/qrcode' . '/' . $response->public_id . '.' . 'png');
            $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/' . $response->public_id . '.' . 'png']);
            \QRCode::text($response->public_id)
                ->setOutfile($fileQrcode)
                ->setSize(10)
                ->setMargin(10)
                ->png();

            return response()->json(['message' => 'Gerado com Sucesso'], 200);
        }

        // $request->amount = $response->min_amount;

        // if (!is_numeric($request->amount) || $request->amount < 0) return response()->json(['message' => 'Introduza um montante válido'], 400);

        $res = StoreAmountGeneration::create([
            'transaction' => UuidStore::uuid4(),
            // 'amount' => $request->amount,
            'amount' => $response->min_amount,
            'store_id' => $response->id,
            'user_client_id' => $request->id
        ]);

        // $fileQrcode = public_path('/images/comerciante/qrcode' . '/' . $res->transaction . '.' . 'png');
        // $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/' . $res->transaction . '.' . 'png']);

        $fileQrcode = public_path('/images/comerciante/qrcode' . '/' . $response->public_id  . '.' . 'png');
        $response->update(['qrcode' => url('/') . '/images/comerciante/qrcode/' . $response->public_id  . '.' . 'png']);

        \QRCode::text($response->public_id)
            ->setOutfile($fileQrcode)
            ->setSize(10)
            ->setMargin(10)
            ->png();

        return response()->json(['message' => 'Transacção Gerada com Sucesso', 'transaction' => $res->transaction, 'account_number' => $response->account_number, 'address_store' => $response->address, 'institution' => $response->institution], 201);
    }
    // todo ---------- CFM


    public function saveComerciante22(Request $request)
    {
        $comerciante = MerchantAccount::create([
            'name' => $request->name,
            'address' => $request->address,
            'institution' => $request->institution,
            'bi' => $request->bi,
            //            'nuit' => $request->nuit,
            'status' => 'activa',
            'phone_number' => $request->phone_number,
            'email' => $request->email,
            'password' => Hash::make('12345678'),
            'imali_account_id' => null,
            //                'account_number' => $numero,
            'user_id' => $request->user()->id,
            //            'nib' => $request->nib,
            'public_merchant_id' => Uuid::generate()->string
        ]);
    }

    public function saveComerciante(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'institution' => 'required',
            'address' => 'required',
            'phone_number' => 'required|unique:merchant_accounts,phone_number',
            'email' => 'required|email|unique:merchant_accounts,email',
            'nuit' => 'required|min:9',
            'nib' => 'required',
            '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_number.unique' => 'O Número do celular já está em uso',
            'phone_number.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',
        ]);
        //        $user = User::find($request->user()->id);

        //        $imali = ImaliAccount::query()->where('account_number', $request->account_number)->first();

        //        $imaliCheck = ImaliAccount::query()->where('account_number', $request->account_number)->count();

        //        $ramo = RamoActivity::find(1);


        //        $generate = new Comerciante();
        //        $numero  = $generate->generateNumber(9);
        //        $numero = $random->GenerateImaliAccountNumberAndMetchant();

        //        $imali = new GenerateImaliAccount();
        ////        $generateImaliAcount = $imali->GenerateImaliAccountNumberAndMetchant();
        ////        $generateImaliAcount = $imali->GenerateImaliAccountNumberAndStore();
        //        $generateImaliAcount = $imali->GenerateImaliAccountNumberAndStoreAndMerchant();
        //        str_replace(["-", "–"], '', Uuid::generate()->string);
        //                'account_number' => $numero,


        $random = new GenerateImaliAccount();
        $numero = $random->GenerateAccountNumber2024();
        //        $numero = $random->GenerateImaliAccountNumberAndStore();

        $comerciante = MerchantAccount::create([
            'name' => $request->name,
            'address' => $request->address,
            'institution' => $request->institution,
            'bi' => $request->bi,
            'nuit' => $request->nuit,
            'status' => 'activa',
            'phone_number' => $request->phone_number,
            'email' => $request->email,
            'password' => Hash::make('12345678'),
            'account_number' => $numero,
            'imali_account_id' => null,
            'user_id' => $request->user()->id,
            'nib' => $request->nib,
            'public_merchant_id' => Uuid::generate()->string,
            'kyc_config_id' => 1
        ]);

        $fileQrcode = $path = public_path('/images/comerciante/qrcode/comerciante' . '/' . $comerciante->public_merchant_id . '.' . 'png');
        $comerciante->update(['qrcode' => url('/') . '/images/comerciante/qrcode/comerciante/' . $comerciante->public_merchant_id . '.' . 'png']);
        \QRCode::text($comerciante->public_merchant_id)
            ->setOutfile($fileQrcode)
            ->setSize(10)
            ->setMargin(10)
            ->png();
        return response()->json(['message' => 'Comerciante Adicionado com Sucesso'], 200);

        //        if ($imaliCheck === 0) {
        //            $comerciante = MerchantAccount::create([
        //                'name' => $request->name,
        //                'address' => $request->address,
        //                'institution' => $request->institution,
        //                'bi' => $request->bi,
        //                'nuit' => $request->nuit,
        //                'status' => 'activa',
        //                'phone_number' => $request->phone_number,
        //                'email' => $request->email,
        //                'password' => Hash::make('12345678'),
        //                'imali_account_id' => null,
        //                'account_number' => $numero,
        //                'user_id' => $request->user()->id,
        //                'nib' => $request->nib,
        //                'public_merchant_id' => Uuid::generate()->string
        //            ]);
        //
        //            $fileQrcode = $path = public_path('/images/comerciante/qrcode/comerciante' . '/' . $comerciante->account_number . '.' . 'png');
        //            $comerciante->update(['qrcode' => 'http://160.242.36.118:81/imaliapitest/public/images/comerciante/qrcode/comerciante/' . $comerciante->public_merchant_id . '.' . 'png']);
        //            \QRCode::text($comerciante->public_merchant_id)
        //                ->setOutfile($fileQrcode)
        //                ->setSize(10)
        //                ->setMargin(10)
        //                ->png();
        //
        //
        //
        //
        ////            if ($contrato) {
        ////                $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->public_merchant_id.'.'.'png');
        //////           $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->account_number.'.'.'png');
        ////                $comerciante->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/'.$comerciante->public_merchant_id.'.'.'png']);
        ////                \QRCode::text($comerciante->public_merchant_id)
        ////                    ->setOutfile($fileQrcode)
        ////                    ->setSize(10)
        ////                    ->setMargin(10)
        ////                    ->png();
        ////
        ////                $log = new Record();
        ////
        ////                $log->createLog([
        ////                    'description' => 'Comerciante Adicionado com Sucesso',
        ////                    'details' => $request->all(),
        ////                    'operation' => 'Save Comerciante',
        ////                    'status' => 'Success',
        ////                    'user_id' => $request->user()->id
        ////                ]);
        ////
        ////                return response()->json(['message' => 'Comerciante Adicionado com Sucesso'], 200);
        ////            }
        //            return response()->json(['message' => 'Comerciante Adicionado com Sucesso'], 200);
        //        } else {
        //
        //            $comerciante = MerchantAccount::create([
        //                'name' => $request->name,
        //                'address' => $request->address,
        //                'institution' => $request->institution,
        //                'bi' => $request->bi,
        //                'nuit' => $request->nuit,
        //                'status' => 'activa',
        //                'phone_number' => $request->phone_number,
        //                'email' => $request->email,
        //                'password' => Hash::make('12345678'),
        //                'account_number' => $numero,
        //                'imali_account_id' => null,
        //                'user_id' => $request->user()->id,
        //                'nib' => $request->nib,
        //                'public_merchant_id' => Uuid::generate()->string
        //            ]);
        //
        ////            $contrato = MerchantContract::create([
        ////                'taxa' =>$request->taxa,
        ////                'max_balance' => $request->max_balance,
        ////                'nr_transaction' => $request->nr_transaction,
        ////                'status' => 'activo',
        ////                'min_amount' => $request->min_amount,
        ////                'max_amount' => $request->max_amount,
        ////                'use_point' => true,
        ////                'use_point_limit' => $request->use_point_limit,
        ////                'user_id' => $request->user()->id,
        ////                'merchant_account_id' => $comerciante->id
        ////            ]);
        //
        //            $fileQrcode = $path = public_path('/images/comerciante/qrcode/comerciante' . '/' . $comerciante->account_number . '.' . 'png');
        //            $comerciante->update(['qrcode' => 'http://160.242.36.118:81/imaliapitest/public/images/comerciante/qrcode/comerciante/' . $comerciante->public_merchant_id . '.' . 'png']);
        //            \QRCode::text($comerciante->public_merchant_id)
        //                ->setOutfile($fileQrcode)
        //                ->setSize(10)
        //                ->setMargin(10)
        //                ->png();


        //            if ($contrato) {
        //                $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->public_merchant_id.'.'.'png');
        ////           $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->account_number.'.'.'png');
        //                $comerciante->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/'.$comerciante->public_merchant_id.'.'.'png']);
        //                \QRCode::text($comerciante->public_merchant_id)
        //                    ->setOutfile($fileQrcode)
        //                    ->setSize(10)
        //                    ->setMargin(10)
        //                    ->png();
        //
        //                $log = new Record();
        //
        //                $log->createLog([
        //                    'description' => 'Comerciante Adicionado com Sucesso',
        //                    'details' => $request->all(),
        //                    'operation' => 'Save Comerciante',
        //                    'status' => 'Success',
        //                    'user_id' => $request->user()->id
        //                ]);
        //
        //                return response()->json(['message' => 'Comerciante adicionado com sucesso'], 200);
        //            }

        //       $comerciante = MerchantAccount::create([
        //           'name' => $request->name,
        //           'endereco' => $request->endereco,
        //           'account_number' => $numero,
        //           'balance' => 0,
        //           'balance_maximo' => $request->balance_maximo,
        //           'estado' => 'activa',
        //           'estado_color' => '#388E3C',
        //           'imali_account_id' => $imali->id,
        //           'user_id' => $request->user_id,
        //           'ramo_activity_id' => $request->ramo_activity_id,
        //           'telefone_comerciante' => $request->telefone_comerciante,
        //           'telefone_loja' => $request->telefone_loja,
        //           'nome_comerciante' => $request->nome_comerciante
        //       ]);
        //
        //       $contrato = MerchantContract::create([
        //           'taxa' =>$request->taxa,
        //           'balance_max' => $request->balance_max,
        //           'nr_transacao' => $request->nr_transacao,
        //           'estado' => 'active',
        //           'valor_max' => $request->valor_max,
        //           'valor_min' => $request->valor_min,
        //           'estado_color' => '#388E3C',
        //           'use_point' => true,
        //           'use_point_limite' => $request->use_point_limite,
        //           'user_id' => $request->user_id,
        //           'merchant_account_id' => $comerciante->id
        //       ]);
        //
        //       if ($contrato) {
        //           $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->account_number.'.'.'png');
        ////           $fileQrcode = $path = public_path('/images/comerciante/qrcode'.'/'.$comerciante->account_number.'.'.'png');
        //           $comerciante->update(['qrcode' => 'http://localhost:8000/images/comerciante/qrcode/'.$comerciante->account_number.'.'.'png']);
        //           \QRCode::text($comerciante->account_number)
        //               ->setOutfile($fileQrcode)
        //               ->setSize(10)
        //               ->setMargin(10)
        //               ->png();;
        //           return response()->json(['message' => 'Comerciante adicionado com sucesso'], 200);
        //       }
        //        return response()->json(['message' => 'Comerciante adicionado com sucesso'], 200);
    }

    public function updateComerciante(Request $request)
    {
        //        $comerciante = MerchantAccount::find($request->id);
        $comerciante = MerchantAccount::query()
            ->where('id', '=', $request->id)->first();
        //        $imaliCheck = ImaliAccount::query()->where('account_number', $request->account_number)->count();

        $comerciante->update([
            'name' => $request->name,
            'address' => $request->address,
            //            'balance' => 0,
            'email' => $request->email,
            'phone_number' => $request->phone_number,
            'institution' => $request->institution,
            'bi' => $request->bi,
            //            'balance_maximo' => $request->balance_maximo,
            'status' => 'activa',
            //            'estado' => 'activa',
            //            'estado_color' => '#388E3C',
            //            'imali_account_id' => null,
            'user_id' => $request->user_id,
            //            'ramo_activity_id' => $request->ramo_activity_id,
            //            'telefone_comerciante' => $request->telefone_comerciante,
            //            'telefone_loja' => $request->telefone_loja,
            //            'nome_comerciante' => $request->nome_comerciante,
            //            'email_loja' => $request->email_loja,
            //            'nib' => $request->nib,
        ]);

        //        $contrato = MerchantContract::query()->where('merchant_account_id', $comerciante->id)->first();
        //        $contrato->update([
        //            'taxa' => $request->taxa,
        //            'balance_max' => $request->balance_max,
        //            'nr_transacao' => $request->nr_transacao,
        //            'estado' => 'active',
        //            'valor_max' => $request->valor_max,
        //            'valor_min' => $request->valor_min,
        //            'estado_color' => '#388E3C',
        //            'use_point' => true,
        //            'use_point_limite' => $request->use_point_limite,
        //            'user_id' => $request->user_id,
        //        ]);
        return response()->json(['message' => 'Dados do Comerciante ' . $comerciante->name, ' actualizados com Sucesso'], 200);
    }

    public function getComerciante($account_number)
    {
        $comerciante = MerchantAccount::query()
            ->join('ramo_activities', 'ramo_activities.id', '=', 'merchant_accounts.ramo_activity_id')
            ->join('users', 'users.id', '=', 'merchant_accounts.user_id')
            ->leftJoin('imali_accounts', 'imali_accounts.id', '=', 'merchant_accounts.imali_account_id')
            ->join('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
            ->where('merchant_accounts.account_number', $account_number)
            ->select('merchant_accounts.*')
            ->first();

        if ($comerciante) {
            return response()->json($comerciante, 200);
        } else {
            return response()->json(['message' => 'Qrcode Inválido'], 404);
        }
    }

    public function getMerchant(Request $request)
    {

        $log = new Record();
        $comerciante = MerchantAccount::query()
            ->join('ramo_activities', 'ramo_activities.id', '=', 'merchant_accounts.ramo_activity_id')
            ->join('users', 'users.id', '=', 'merchant_accounts.user_id')
            ->leftJoin('imali_accounts', 'imali_accounts.id', '=', 'merchant_accounts.imali_account_id')
            ->join('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
            ->where('merchant_accounts.public_merchant_id', $request->merchant_id)
            ->select('merchant_accounts.*')
            ->first();
        if ($comerciante) {

            $log->createLog([
                'description' => 'Comerciante encontrado com Sucesso',
                'details' => $comerciante->name . ' ' . $comerciante->account_number,
                'operation' => 'Get Comerciante',
                'status' => 'Success',
                'user_id' => $request->user()->id
            ]);
            return response()->json($comerciante, 200);
        } else {
            $log->createLog([
                'description' => 'Qrcode Inválido',
                'details' => $request->all(),
                'operation' => 'Get Comerciante',
                'status' => 'Success',
                'user_id' => $request->user()->id
            ]);
            return response()->json(['message' => 'Qrcode Inválido'], 404);
        }
    }

    public function getStorePayment(Request $request)
    {
        $log = new Record();
        $comerciante = Store::query()
            ->where('public_id', $request->merchant_id)
            ->where('qrcode_has_amount', 0)
            ->orWhere('account_number', $request->merchant_id)
            // ->orWhere('account_number', '=', $request->merchant_id)
            ->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
            ->select('stores.*', 'ramo_activities.nome as category', 'ramo_activities.logo as logo_category')
            ->first();

        if ($comerciante) {
            $log->createLog([
                'description' => 'Comerciante encontrado com Sucesso',
                'details' => $comerciante->name . ' ' . $comerciante->account_number,
                'operation' => 'Get Comerciante',
                'status' => 'Success',
                'user_id' => $request->user()->id
            ]);

            // $comerciante->makeHidden([
            //     "industry_activity", "user_id", "created_at", "updated_at", "user_client_id",
            //     "balance", "session_status", "nib", "nuit", "status", "email", "manager_phone_number",
            //     "manager", "id", "merchant_account_id", "merchant_contract_id", "username", "latitude", "longitude"
            // ]);

            Log::info('Chegou no final do if', [
                'content' => 'Retornou comerciante',
            ]);

            return response()->json($comerciante);
        } else {

            $store = Store::query()
                ->join('payments', 'payments.store_id', '=', 'stores.id')
                ->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
                ->where('payments.transaction_id', '=', $request->merchant_id)
                ->select('stores.name', 'stores.logo', 'stores.mobile_phone', 'stores.account_number', 'stores.address', 'payments.transaction_id as transaction', 'payments.amount', 'payments.status', 'ramo_activities.nome as category', 'ramo_activities.logo as logo_category')
                ->first();

            if ($store) {
                return response()->json($store);
            } else {

                $store2 = Store::query()
                    ->join('store_amount_generations', 'store_amount_generations.store_id', '=', 'stores.id')
                    // ->join('payments', 'payments.store_id', '=', 'stores.id')
                    ->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
                    // ->where('store_amount_generations.transaction', '=', $request->merchant_id)
                    ->where('stores.public_id', '=', $request->merchant_id)
                    ->orderBy('store_amount_generations.id', 'desc')
                    ->select('stores.*', 'store_amount_generations.amount', 'ramo_activities.nome as category', 'ramo_activities.logo as logo_category', 'store_amount_generations.*', 'store_amount_generations.id as store_amount_generation_id')
                    ->first();

                if ($store2) return response()->json($store2);

                return response()->json(['message' => 'Loja Inválida'], 404);
                // return response()->json(['message' => 'Qrcode Inválido'], 404);
            }
        }
    }

    public function getMerchant2(Request $request)
    {

        $log = new Record();
        //        $comerciante = MerchantAccount::query()
        //            ->join('ramo_activities', 'ramo_activities.id', '=', 'merchant_accounts.ramo_activity_id')
        //            ->join('users', 'users.id', '=', 'merchant_accounts.user_id')
        //            ->leftJoin('imali_accounts', 'imali_accounts.id', '=', 'merchant_accounts.imali_account_id')
        //            ->join('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
        //            ->where('merchant_accounts.public_merchant_id', $request->merchant_id)
        //            ->select('merchant_accounts.*')
        //            ->first();
        $comerciante = Store::query()
            ->where('public_id', '=', $request->merchant_id)
            ->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
            ->select('stores.*', 'ramo_activities.nome as category', 'ramo_activities.logo as logo_category')
            ->first();

        if ($comerciante) {
            $log->createLog([
                'description' => 'Comerciante encontrado com Sucesso',
                'details' => $comerciante->name . ' ' . $comerciante->account_number,
                'operation' => 'Get Comerciante',
                'status' => 'Success',
                'user_id' => $request->user()->id
            ]);
            return response()->json($comerciante, 200);
        } else {

            $store = Store::query()
                //                ->join('store_amount_generations', 'store_amount_generations.store_id', '=', 'stores.id')
                ->join('payments', 'payments.store_id', '=', 'stores.id')
                ->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
                ->where('store_amount_generations.transaction', '=', $request->merchant_id)
                ->select('stores.*', 'store_amount_generations.amount', 'ramo_activities.nome as category', 'ramo_activities.logo as logo_category', 'store_amount_generations.*', 'store_amount_generations.id as store_amount_generation_id')
                ->first();
            if ($store) {
                return response()->json($store);
            } else {
                return response()->json(['message' => 'Qrcode Inválido'], 404);
            }
        }
    }

    public function getComerciante2($account_number)
    {
        $comerciante = MerchantAccount::query()
            ->join('ramo_activities', 'ramo_activities.id', '=', 'merchant_accounts.ramo_activity_id')
            ->join('users', 'users.id', '=', 'merchant_accounts.user_id')
            ->join('imali_accounts', 'imali_accounts.id', '=', 'merchant_accounts.imali_account_id')
            ->join('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
            ->where('merchant_accounts.account_number', $account_number)
            ->select('ramo_activities.nome as ramo', 'imali_accounts.account_number as imali_account', 'users.name as user_name', 'merchant_contracts.*', 'merchant_accounts.*')
            ->first();
        return response()->json(['data' => $comerciante], 200);
    }

    public function getComerciantes(Request $request)
    {
        //        $comerciante = MerchantAccount::query()
        //            ->join('ramo_activities', 'ramo_activities.id', '=', 'merchant_accounts.ramo_activity_id')
        //          ->join('admins', 'admins.id', '=', 'merchant_accounts.user_id')
        //            ->leftJoin('imali_accounts', 'imali_accounts.id', '=', 'merchant_accounts.imali_account_id')
        //->leftJoin('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
        //            ->select('ramo_activities.nome as ramo', 'imali_accounts.account_number as imali_account', 'users.name as user_name', 'merchant_contracts.*', 'merchant_accounts.*')
        //        ->select('merchant_accounts.*', 'admins.name as username')
        //      ->distinct()
        //    ->paginate(10);
        $perPage = !!$request->input('per_page') ? $request->input('per_page') : 10;
        $orderType = $request->input('order_type') === 'ASC' ? 'ASC' : 'DESC';
        $orderBy = !!$request->input('order_by') && $request->input('order_by') !== 'null' ? $request->input('order_by') : 'merchant_accounts.id';

        $comerciante = MerchantAccount::query()->orderBy($orderBy, $orderType)->paginate($perPage);

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

    public function getComercianteTransactions($account_number)
    {
        $comerciante = MerchantAccount::query()
            ->join('merchant_contracts', 'merchant_contracts.merchant_account_id', '=', 'merchant_accounts.id')
            ->where('merchant_accounts.account_number', $account_number)
            ->first();
        $payments = Payment::query()
            ->join('users', 'users.id', '=', 'payments.sender_id')
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'payments.sender_id')
            ->where('payments.merchant_account_id', $comerciante->id)
            ->get();
        return response()->json(['payments' => $payments, 'data' => $comerciante], 200);
    }

    // public function getUserByImaliAccountReference($reference)
    public function getUserByImaliAccountReferenceNEW25($reference)
    {
        $user = ImaliAccount::query()
            ->join('users', 'users.id', '=', 'imali_accounts.user_id')
            ->where('imali_accounts.reference', $reference)
            ->first();

        $lastBalance = 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.reference', $reference)
            ->select('recharge_imali_accounts.*')
            ->get()->last();

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

    // public function getUserByImaliAccountReferenceNEW25($reference)
    public function getUserByImaliAccountReference($reference)
    {
        $ur = User::getAccount($reference);
        $user = User::getUserDetails($ur->user_id);

        if ($user->profile === 'business') {
            $lastBalance = RechargeImaliAccount::query()
                ->join('business_accounts', 'recharge_imali_accounts.account_reference', 'business_accounts.reference')
                // ->join('users as user2', 'user2.id', 'business_accounts.user_id')
                ->where('recharge_imali_accounts.account_reference', $reference)
                ->select(
                    'recharge_imali_accounts.created_at',
                    'recharge_imali_accounts.updated_at'
                )
                ->get()
                ->last();
        } else {
            $lastBalance = RechargeImaliAccount::query()
                ->join('imali_accounts', 'recharge_imali_accounts.account_reference', 'imali_accounts.reference')
                // ->join('users', 'users.id', 'imali_accounts.user_id')
                ->where('recharge_imali_accounts.account_reference', $reference)
                ->select(
                    'recharge_imali_accounts.created_at',
                    'recharge_imali_accounts.updated_at',
                )
                ->get()
                ->last();
        }

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

    public function getStore($id)
    {
        $store = Store::query()
            ->where('stores.merchant_account_id', $id)
            ->leftJoin('admins', 'admins.id', '=', 'stores.user_id')
            ->leftJoin('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
            ->leftJoin('merchant_contracts', 'stores.merchant_contract_id', '=', 'merchant_contracts.id')
            ->join('merchant_accounts', 'stores.merchant_account_id', '=', 'merchant_accounts.id')
            ->select('stores.*', 'admins.name as username', 'ramo_activities.nome as industry', 'merchant_contracts.*', 'merchant_accounts.name as merchant_name', 'stores.name as store_name')
            ->get();

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