<?php 
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use Mail;
use Session;
use Cookie;
use kornrunner\Secp256k1;
use kornrunner\Keccak;
use App\Classes\BitcoinAddressGenerator;
use kornrunner\Ethereum\Address;
use \FurqanSiddiqui\BIP39\BIP39;
use Illuminate\Support\Facades\Log;

class WalletController extends Controller
{
    public function index()
    {
       // Session::forget('template_info');

    }
    
    public function network()
    {
        $wallet_details = DB::table('wallet_network')->where('Status','1')->get();
        $wordCount = $wallet_details->count();

        
        foreach($wallet_details as $wallet_details)
        {
            $network[]=array(
                "ID" => $wallet_details->ID,
                "Wallet_network" => $wallet_details->Wallet_network,
                "Wallet_Symbol" => $wallet_details->Wallet_Symbol,
                "Wallet_icon"=> url('').'/images/coins/'.$wallet_details->Wallet_icon,
                "Status" => $wallet_details->Status,
                "Network_mode" => $wallet_details->Network_mode


            );


        }

        $data = [
            'success' => true,
            'message' => 'Data retrieved successfully!',
            'totalrecords' => $wordCount,
            'networks' => $network
        ];
   
      return response()->json($data, 200); 
         
    }

    public function generatewallet($id='')
    {
        
    
        if($id=='1')//bitcoin wallet address generator
        {
            /*$BTC = new BitcoinAddressGenerator();
            $address=$BTC->getP2WPKH();
            $private_key=$BTC->getPrivateKey();
            $public_key=$BTC->getPublicKey();*/

            $url = "https://www.celluma.center/wallet/btc_address"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
  
  
            $address=$response['address'];
            $private_key=$response['privateKey'];
            $public_key='';
            $mnemonic=$response['mnemonic'];
        }
        else if($id=='2' || $id=='3' || $id=='6') //Etherum, Binance, Polygon
        {
            /*$address = new Address();
            $wallet_address=$address->get();
            $private_key = $address->getPrivateKey();
            $address=$wallet_address;
            $public_key='';    */
            
            $url = "https://www.celluma.center/wallet/eth_address"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            $res = curl_exec($ch); 
            
           
            $response=json_decode($res,true);
            
            $address=$response['address'];
            $private_key=$response['privateKey'];
            $public_key='';
            $mnemonic=$response['mnemonic'];
            
        }
        else if($id=='4') // Tron network
        {
            $url = "https://www.celluma.center/wallet/tron-address"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
          

            $address=$response['address'];
            $private_key=$response['privateKey'];
            $public_key='';
             $mnemonic=$response['mnemonic'];

        }
        else if($id=='5') // Solona network
        {
            $url = "https://www.celluma.center/wallet/get_address"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
            $address=$response['address'];
            $private_key=$response['privateKey'];
            $public_key='';
            $mnemonic=$response['mnemonic'];

        }
        $return = array("address" => $address, "privatekey" => $private_key,"publickey" =>$public_key,"memonic" =>$mnemonic);
        return $return;
    }

    public function wallet_generate(Request $request)
    {
        $network = $request->input('network');
        $wallet_name = $request->input('wallet_name');
        $password= md5($request->input('password'));
        $hint = $request->input('hint');
        $wallet_user = $request->input('userid');
        $date=date("Y-m-d H:i:s");
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $number_of_digits = 12;
            $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
             $store_data=array(
                "wallet_id"=> $wallet_id,
                "wallet_name"=> $wallet_name,
                "network_mode" => $network,
                "wallet_user_id" => $get_response->Id,
                "hint" => $hint,
                "wallet_password" => $password,
                "created_date" => $date 
            );

            $result=DB::table('wallet_generation')->insert($store_data);

            $pass_data=array(
                "network" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user
            );


            $data = [
                'success' => true,
                'message' => 'Data retrieved successfully!',
                'totalrecords' => 1,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_approve'
            ];
        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'wallet_start'
            ];

        }
         return response()->json($data, 200); 
    }
    
    
    public function hdwallet_generate(Request $request)
    {
        $network = $request->input('network');
        if($network=='')
            $network=0;
        $wallet_name = $request->input('wallet_name');
        $password= md5($request->input('password'));
        $hint = $request->input('hint');
        $wallet_user = $request->input('userid');
        $date=date("Y-m-d H:i:s");
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $number_of_digits = 12;
            $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
             $store_data=array(
                "wallet_id"=> $wallet_id,
                "wallet_name"=> $wallet_name,
                "network_mode" => $network,
                "wallet_user_id" => $get_response->Id,
                "hint" => $hint,
                "wallet_password" => $password,
                "wallet_type" => '2',
                "created_date" => $date 
            );

            $result=DB::table('wallet_generation')->insert($store_data);

            $pass_data=array(
                "network" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user
            );


            $data = [
                'success' => true,
                'message' => 'Data retrieved successfully!',
                'totalrecords' => 1,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_approve'
            ];
        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'wallet_start'
            ];

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

    }

    public function wallet_approve(Request $request)
    {
        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');

        
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $pass_data=array(
                "network" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user
            );

            $data = [
                'success' => true,
                'message' => 'Data retrieved successfully!',
                'totalrecords' => 1,
                'walletinfo' => $pass_data,
                'redirect' => 'generate_mnemonic'
            ];

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'wallet_start'
            ];

        }

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

    public function generate_mnemonic(Request $request)
    {

        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $date=date("Y-m-d H:i:s");
        //$pharse=$this->generateBIP39Mnemonic();
        //$mnemonic = BIP39::Generate(12);
        
        
        
        if($network=='0')
        {
            
            $mnemonic='';
            $generated_address=$this->multiplewallet();
            
            if($generated_address['valid']==true)
            {
                
               
              $address_info=$generated_address['message'];
              $i=0;
              foreach($address_info as $address_info)
              {
                  $i++;
                  
                    $address=$address_info['address'];
                    if(!empty($address_info['publickey']))
                        $public_key=$address_info['publickey'];
                    else
                        $public_key='';
                    $private_key=$address_info['private_key'];
                    
                    
                    $pharse=trim($address_info['mnemonic']);
                    
                    $array_value = explode(" ",$pharse);
                    $quoted_array = array_map(function($item) { return "\"$item\""; }, $array_value);
            
                    $secret_phase= "[" . implode(",",$quoted_array) . "]";
                    $json_value = json_decode($secret_phase);
                    
                    $mnemonic=$json_value;
                    
                    if($i=='1')
                    {
                        
                        $update_data=array(
                        "wallet_area" => $address,
                        "wallet_public" => $public_key,
                        "wallet_secrets" => $private_key,
                        "secret_phase" => $secret_phase,
                        "network_mode" => $i,
                        "status" =>'0'
                        );
                        DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
                    }
                    else
                    {
                        $get_response=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
                        
                          $number_of_digits = 12;
                          $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
                          $store_data=array(
                            "wallet_id"=> $wallet_id,
                            "wallet_name"=> $get_response->wallet_name,
                            "wallet_user_id" => $get_response->wallet_user_id,
                            "hint" => $get_response->hint,
                            "wallet_password" => $get_response->wallet_password,
                            "wallet_area" => $address,
                            "wallet_public" => $public_key,
                            "wallet_secrets" => $private_key,
                            "secret_phase" => $secret_phase,
                            "network_mode" => $i,
                            "wallet_type" => '2',
                            "status" =>'0',
                            "created_date" => $date 
                        );
            
                        $result=DB::table('wallet_generation')->insert($store_data);
                    }
                }
              
                $pass_data=array(
                    "network" => $network,
                    "wallet_id" => $wallet_id,
                    "userid" => $wallet_user,
                    "secret_phase" => $json_value,
                    "phase_count" =>12
                );
                
                 $data = [
                    'success' => true,
                    'message' => 'Data retrieved successfully!',
                    'totalrecords' => 1,
                    'walletinfo' => $pass_data,
                    'redirect' => 'verify_mnemonic'
                ];
             
             
             
               
           }
           
           else
           {
               $pass_data=array(
                "network" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user
                );
            
                $data = [
                    'success' => false,
                     'message' => 'User Details not found. Please try again later',
                     'walletinfo' => $pass_data,
                    'totalrecords' => 0,
                    'redirect' => 'generate_mnemonic'
                ];
               
           }
            
        }
        else
        {
        
            $generated_address=$this->generatewallet($network);
        
             $address=$generated_address['address'];
            if(!empty($generated_address['publickey']))
                $public_key=$generated_address['publickey'];
            else
                $public_key='';
            $private_key=$generated_address['privatekey'];
            
            
            $pharse=trim($generated_address['memonic']);
            
            $array_value = explode(" ",$pharse);
            $quoted_array = array_map(function($item) { return "\"$item\""; }, $array_value);
    
            $secret_phase= "[" . implode(",",$quoted_array) . "]";
            $json_value = json_decode($secret_phase);
        
        
        
            $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
            if($get_response)
            {
                $pass_data=array(
                    "network" => $network,
                    "wallet_id" => $wallet_id,
                    "userid" => $wallet_user,
                    "secret_phase" => $json_value,
                    "phase_count" =>12
                );
    
                $update_data=array(
                    "wallet_area" => $address,
                    "wallet_public" => $public_key,
                    "wallet_secrets" => $private_key,
                    "secret_phase" => $secret_phase,
                    "status" =>'0'
                );
    
                DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
    
                $data = [
                    'success' => true,
                    'message' => 'Data retrieved successfully!',
                    'totalrecords' => 1,
                    'walletinfo' => $pass_data,
                    'redirect' => 'verify_mnemonic'
                ];
    
            }
            else
            {
                $data = [
                    'success' => false,
                    'message' => 'User Details not found. Please try again later',
                    'totalrecords' => 0,
                    'redirect' => 'wallet_start'
                ];
    
            }
        }
      

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

        
    }

    

    public function verify_mnemonic(Request $request)
    {
    
          Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        $network = $request->input('network');
        if($network=='')
                $network = $request->input('network_mode');
        
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        
        
        $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        
     
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        $pharse= $request->input('pharse');
        $original_pharse=$get_wallet_name->secret_phase;
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();

        if($get_response)
        {
           
            $receivedArray = json_decode($original_pharse, true);
            $flag=0;
            if (empty(array_diff($pharse, $receivedArray)) && empty(array_diff($receivedArray, $pharse))) 
            {
                $flag=1;
            }
         
            if($flag=='1')
            {
                
               
                $update_data=array(
                 "Status" =>1
                );

                 DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
                
                 $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
                 
            
                $get_network=DB::table('wallet_network')->where('ID',$get_wallet_name->network_mode)->first();
                
              
                $pass_data=array(
                    "network_mode" => $network,
                    "wallet_id" => $wallet_id,
                    "userid" => $wallet_user,
                    "address" => $get_wallet_name->wallet_area,
                    "wallet_type" => "1",
                    "wallet_name" => $get_wallet_name->wallet_name,
                    "wallet_balance" =>'0.00 '.$get_network->Wallet_Symbol
                );

                $data = [
                    'success' => true,
                    'message' => 'Data retrieved successfully!',
                    'totalrecords' => 1,
                    'walletinfo' => $pass_data,
                    'redirect' => 'Asset_overview'
                ];
            }
            else
            {

                $data = [
                    'success' => false,
                    'message' => 'Backup secret phase mismatched Please verify once',
                    'totalrecords' => 0,
                    'redirect' => 'verify_mnemonic'
                ];

            }

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'wallet_start'
            ];

        }

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


    public function wallets(Request $request)
    {
            Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        $network = $request->input('network');
       
        $wallet_user=$request->input('userid');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        
        $get_user=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_user)
        {
            $get_wallets=DB::table('wallet_generation')->where('Status','1')->where('wallet_user_id',$get_user->Id)->where('network_mode',$network)->get();
            $wordCount = $get_wallets->count();
            if($wordCount >0)
            {
            
                foreach($get_wallets as $wallet_details)
                {
                    if($wallet_details->wallet_type=='1')
                    {
                        $wallet_label="Created";
                    }
                    else if($wallet_details->wallet_type=='2')
                    {
                        $wallet_label="HD";
                    }
                    else if($wallet_details->wallet_type=='3')
                    {
                        $wallet_label="Import";
                    }
                    else
                    {
                        $wallet_label="Watch";
                    }
                    
                    $balance=$this->getbalance($network,$wallet_details->wallet_area);
                    
                    
                    
                    
                    $wallets[]=array(
                        "wallet_id" => $wallet_details->wallet_id,
                        "wallet_name" => $wallet_details->wallet_name,
                        "wallet_address" => $wallet_details->wallet_area,
                        "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol,
                        "wallet_type" => $wallet_details->wallet_type,
                        "wallet_label" => $wallet_label
                        );
                }
    
                    $data = [
                    'success' => true,
                    'message' => 'Data retrieved successfully!',
                    'totalrecords' => $wordCount,
                    'userid' => $wallet_user,
                    'wallets' => $wallets,
                   'network' => $network
                    ];
            }
            else
            {
                 $data = [
                    'success' => false,
                    'message' => 'No wallet records found',
                    'totalrecords' => 0,
                    'redirect' => 'Asset_overview'
                ];
                
            }
        }
        else
        {
             $data = [
                    'success' => false,
                    'message' => 'User Details not found!',
                    'totalrecords' => 0,
                    'redirect' => 'Asset_overview'
                ];
            
        }
        
         return response()->json($data, 200); 
    }
    
    public function getbalance($network,$address)
    {
        
          $balance='0.00';
          if($network !='5')
          {
             if($network=='1')
              $url = "https://blockchain.info/balance?active=".$address; 
             else if($network=='2')
              $url="https://api.etherscan.io/api?module=account&action=balance&address=".$address."&tag=latest&apikey=VYTED85S8KNGZF5YKQMCZEQ1SX9QKAJUCI";
             else if($network=='3')
              $url="https://api.bscscan.com/api?module=account&action=balance&address=".$address."&tag=latest&apikey=GIZWMXXDJG1TCNE824K3EQ3WXNHK979SMP";
            else if($network=='4')
              $url = "https://api.trongrid.io/v1/accounts/".$address;
            else
              $url="https://api.polygonscan.com/api?module=account&action=balance&address=".$address."&tag=latest&apikey=NT2HBAZM5Z53S4VBX2XXR5V9XHBMK1EPVZ";
          
              $ch = curl_init(); 
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
              curl_setopt($ch, CURLOPT_URL, $url); 
              curl_setopt($ch, CURLOPT_POST, false);              // Use POST method
              $res = curl_exec($ch); 
              $response=json_decode($res,true);
             
              
          }
          else
          {
              
                $solana_rpc_url = "https://api.mainnet-beta.solana.com";
                // Create the RPC payload
                $payload = json_encode([
                    "jsonrpc" => "2.0",
                    "id" => 1,
                    "method" => "getBalance",
                    "params" => [
                        $address
                    ]
                ]);
                
                // Initialize cURL
                $ch = curl_init();
                
                // Set cURL options
                curl_setopt($ch, CURLOPT_URL, $solana_rpc_url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
                curl_setopt($ch, CURLOPT_HTTPHEADER, [
                    'Content-Type: application/json'
                ]);
                $res = curl_exec($ch);
                $response=json_decode($res,true);
          }
          
          
                    if($network=='2' || $network=='3' || $network=='6')
                    {
                       
                        if($response['status']=='1')
                        {
                            $balance=$response['result'];
                            if($balance > 0)
                                $balance=$balance/1000000000000000000;
                                
                            $balance=number_format($balance,4);
                            
                        }
                        
                        
                    }
                    else if($network=='1')
                    {
                        
                        
                        if(empty($response['error']))
                        {
                          
                            if (isset($response[$address]['final_balance'])) {
                                $balance=$response[$address]['final_balance'];
                                if($balance >0)
                                    $balance=$balance/100000000;
                                
                            }
                        }
                    }
                    else if($network=='4')
                    {
                         if(!empty($response['data'][0]['balance'])) 
                         {
                            $tron_balance_sun = $response['data'][0]['balance'];
                            if($tron_balance_sun > 0)
                                $balance = $tron_balance_sun / 1000000;
                            
                        }
                        
                    }
                    else if($network=='5')
                    {
                       
                        if (!empty($response['result']['value'])) 
                        {
                            $solana_balance_lamports = $response['result']['value'];
                            $balance = $solana_balance_lamports / 1000000000;
                            if($balance > 0)
                                $balance=number_format($balance,4);
                        }
                    
                        
                    }
          
                
                return $balance;
     }
    

    public function walletname_change(Request $request)
    {
        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $wallet_name=$request->input('wallet_name');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {

           $update_data=array(
                "wallet_name" => $wallet_name
            );

            DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
            
            
             $balance=$this->getbalance($network,$get_wallet_name->wallet_area);

            $pass_data=array(
                "network_mode" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user,
                "address" => $get_wallet_name->wallet_area,
                "wallet_name" => $wallet_name,
                "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
            );

            $data = [
            'success' => true,
            'message' => 'Wallet name updated!',
            'totalrecords' => 1,
            'walletinfo' => $pass_data,
            'redirect' => 'wallet_details'
            ];

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'wallet_start'
            ];
        }

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


    }


    public function changepassword(Request $request)
    {

        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $current = $request->input('current_pass');
        $newpass = $request->input('new_pass');
        $conpass= $request->input('confirm_pass');
        $password_hint = $request->input('password_hint');
        $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        $original_pass=$get_wallet_name->wallet_password;
        
        $balance=$this->getbalance($network,$get_wallet_name->wallet_area);

        $pass_data=array(
            "network_mode" => $network,
            "wallet_id" => $wallet_id,
            "userid" => $wallet_user,
            "address" => $get_wallet_name->wallet_area,
            "wallet_name" => $get_wallet_name->wallet_name,
            "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
        );

        if(md5($current)==$original_pass)
        {

            if($conpass!=$newpass)
            {

                $data = [
                    'success' => false,
                    'message' => 'New and confirm password Mismatched !',
                    'totalrecords' => 0,
                    'walletinfo' => $pass_data,
                    'redirect' => 'wallet_password'
                    ];

            }
            else
            {

                $update_data=array(
                    "wallet_password" => md5($newpass),
                    "hint" => $password_hint
                );
    
                DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
                $data = [
                'success' => true,
                'message' => 'Password successfully updated!',
                'totalrecords' => 1,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_details'
                ];
            }
            
        }
        else
        {

            $data = [
                'success' => false,
                'message' => 'Current password not matched!',
                'totalrecords' => 0,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_password'
            ];
        }

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


    public function resetpassword(Request $request)
    {

        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $newpass = $request->input('new_pass');
        $conpass= $request->input('confirm_pass');
        $password_hint = $request->input('password_hint');
        $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        $original_pass=$get_wallet_name->wallet_password;
        $pharse= $request->input('secret_pharse');
        $original_pharse=$get_wallet_name->secret_phase;
        $balance=$this->getbalance($network,$get_wallet_name->wallet_area);
        $pass_data=array(
            "network_mode" => $network,
            "wallet_id" => $wallet_id,
            "userid" => $wallet_user,
            "address" => $get_wallet_name->wallet_area,
            "wallet_name" => $get_wallet_name->wallet_name,
            "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
        );
        $receivedArray = json_decode($original_pharse, true);
        $flag=0;
        if (empty(array_diff($pharse, $receivedArray)) && empty(array_diff($receivedArray, $pharse))) 
        {
            $flag=1;
        }

        if($flag=='1')
        {

            if($conpass!=$newpass)
            {

                $data = [
                    'success' => false,
                    'message' => 'New and confirm password Mismatched !',
                    'totalrecords' => 0,
                    'walletinfo' => $pass_data,
                    'redirect' => 'wallet_password'
                    ];

            }
            else
            {
                $update_data=array(
                    "wallet_password" => md5($newpass)
                );
                DB::table('wallet_generation')->where('wallet_id',$wallet_id)->update($update_data);
                $data = [
                'success' => true,
                'message' => 'Password successfully updated!',
                'totalrecords' => 1,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_details'
                ];
            }
        }
        else
        {

            $data = [
                'success' => false,
                'message' => 'Backup secret phase mismatched Please verify once',
                'totalrecords' => 0,
                'walletinfo' => $pass_data,
                'redirect' => 'wallet_password'
            ];
        }

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

    public function verifypassword(Request $request)
    {

        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $password = $request->input('password');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        $get_wallet_name=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        $original_pass=$get_wallet_name->wallet_password;
        
        $balance=$this->getbalance($network,$get_wallet_name->wallet_area);
        if($get_wallet_name)
        {

            $pass_data=array(
                "network" => $network,
                "wallet_id" => $wallet_id,
                "userid" => $wallet_user,
                "address" => $get_wallet_name->wallet_area,
                "wallet_name" => $get_wallet_name->wallet_name,
                "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
            );


            if(md5($password)==$original_pass)
            {

                $pass_data['secret_pharse'] = $get_wallet_name->secret_phase;
                $pass_data['private_key'] = $get_wallet_name->wallet_secrets;
                $data = [
                    'success' => true,
                    'message' => 'Password verified. Approve terms and conditions',
                    'totalrecords' => 0,
                    'walletinfo' => $pass_data,
                    'redirect' => 'wallet_details'
                ];
            }
            else
            {
                $data = [
                    'success' => false,
                    'message' => 'Current password not matched!',
                    'totalrecords' => 0,
                    'walletinfo' => $pass_data,
                    'redirect' => 'wallet_details'
                ];

            }
        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'No wallet information matched!',
                'totalrecords' => 0,
                'walletinfo' => $pass_data,
                'redirect' => 'Asset_overview'
            ];

        }

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



    public function addcontact(Request $request)
    {
        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_address=$request->input('wallet_address');
        $wallet_name=$request->input('wallet_name');
        $wallet_note=$request->input('wallet_note');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();

        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {

            if($wallet_name=='')
            {
                $data = [
                    'success' => false,
                    'message' => 'Wallet Name Required. cannot be empty',
                    'totalrecords' => 0,
                    'redirect' => 'wallet_addressbook'
                ];

            }
            else if($wallet_address=='')
            {
                $data = [
                    'success' => false,
                    'message' => 'Wallet address Required. cannot be empty',
                    'totalrecords' => 0,
                    'redirect' => 'wallet_addressbook'
                ];

            }
            else
            {
                $check_wallet=$this->get_verify($wallet_address,$network);
                
               
               
                if($check_wallet['valid']==true)
                {
                    

                    $check_data=array(
                        "wallet_user_id" => $get_response->Id,
                        "wallet_address" => $wallet_address
                    );
                    $check_wallet=DB::table('wallet_addressbook')->where($check_data)->first();
                    if(empty($check_wallet))
                    {

                        $pass_data=array(
                            "network_mode" => $network,
                            "wallet_user_id" => $get_response->Id,
                            "wallet_address" => $wallet_address,
                            "wallet_note" => $wallet_note,
                            "wallet_name" => $wallet_name
                        );
                        $result=DB::table('wallet_addressbook')->insert($pass_data);

                        $data = [
                            'success' => true,
                            'message' => "New address added successfully",
                            'totalrecords' => 1,
                            'redirect' => 'wallet_addressbook'
                        ];
                    }
                    else
                    {

                        $data = [
                            'success' => false,
                            'message' => 'The address already available selected network',
                            'totalrecords' => 0,
                            'network'=>$network,
                            'redirect' => 'wallet_addressbook'
                            ];

                    }
                }
                else
                {
                    $data = [
                        'success' => false,
                        'message' => 'The address does not match the selected network',
                        'totalrecords' => 0,
                        'network'=>$network,
                        'redirect' => 'wallet_addressbook'
                    ];

                }

            }

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_addressbook'
            ];

        }

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

    public function editcontact(Request $request)
    {
        $contact_id =$request->input('contact_id');
       
        //DB::enableQueryLog();
        $get_verify= DB::table('wallet_addressbook')->where('Id',$contact_id)->first();
        //$quries = DB::getQueryLog();
        //dd($quries);
       
        
       
        $get_network=DB::table('wallet_network')->get();
        if($get_verify)
        {
            $data = [
                'success' => true,
                'message' => 'Wallet address details retrived',
                'totalrecords' => 1,
                "addressinfo"=> $get_verify,
                //"networks" => $get_network,
                'network'=>$get_verify->network_mode,
                'redirect' => 'wallet_addressbook'
            ];

        }
        else
        {
            $network=0;
            $data = [
                'success' => false,
                'message' => 'Wallet address not found.Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_addressbook'
            ];

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

    }
    public function updatecontact(Request $request)
    {

        $network = $request->input('network');
        $contact_id =$request->input('contact_id');
        $wallet_user=$request->input('userid');
        $wallet_address=$request->input('wallet_address');
        $wallet_name=$request->input('wallet_name');
        $wallet_note=$request->input('wallet_note');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();

        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        
        $get_verify= DB::table('wallet_addressbook')->where('Id',$contact_id)->first();
        
        if($get_verify)
        {
            if($get_response)
            {

                if($wallet_name=='')
                {
                    $data = [
                        'success' => false,
                        'message' => 'Wallet Name Required. cannot be empty',
                        'totalrecords' => 0,
                        'redirect' => 'wallet_addressbook'
                    ];
    
                }
                else if($wallet_address=='')
                {
                    $data = [
                        'success' => false,
                        'message' => 'Wallet address Required. cannot be empty',
                        'totalrecords' => 0,
                        'network'=>$network,
                        'redirect' => 'wallet_addressbook'
                    ];
    
                }
                else
                {
                    $check_wallet=$this->get_verify($wallet_address,$network);
                    if($check_wallet['valid']==true)
                    {

                        $check_data=array(
                            "wallet_user_id" => $get_response->Id,
                            "wallet_address" => $wallet_address
                        );
                         //$check_wallet=DB::table('wallet_addressbook')->where($check_data)->where('Id','!=',$contact_id)->first();

                        $check_wallet = DB::table('wallet_addressbook')->where($check_data)->where('Id', '!=', $contact_id)->first();
                        if(empty($check_wallet))
                        {

                            $pass_data=array(
                                "network_mode" => $network,
                                "wallet_user_id" => $get_response->Id,
                                "wallet_address" => $wallet_address,
                                "wallet_note" => $wallet_note,
                                "wallet_name" => $wallet_name
                            );
                            $result=DB::table('wallet_addressbook')->where('Id',$contact_id)->update($pass_data);

                            $data = [
                                'success' => true,
                                'message' => "addressbook updated successfully",
                                'totalrecords' => 1,
                                'network'=>$network,
                                'redirect' => 'wallet_addressbook'
                            ];
                        }
                        else
                        {
                            $data = [
                            'success' => false,
                            'message' => 'The address already available selected network',
                            'totalrecords' => 0,
                            'network'=>$network,
                            'redirect' => 'edit_addressbook'
                            ];

                        }
                    }
                    else
                    {
                        $data = [
                            'success' => false,
                            'message' => $check_wallet['message'],
                            'totalrecords' => 0,
                            'network'=>$network,
                            'redirect' => 'edit_addressbook'
                            ];
                    }

                }
            }
            else
            {
                 $data = [
                    'success' => false,
                    'message' => 'User Details not found. Please try again later',
                    'totalrecords' => 0,
                    'network'=>$network,
                    'redirect' => 'wallet_addressbook'
                ];
            }

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'No wallet address information found. Please once check contact ID',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_addressbook'
            ];

        }

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

    }

    public function walletbook(Request $request)
    {

        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        $get_networks=DB::table('wallet_network')->where('ID',$network)->first();
        
        $wallet_details = DB::table('wallet_network')->where('Status','1')->get();
        $wordCounts = $wallet_details->count();
         foreach($wallet_details as $wallet_details)
         {
                $network_list[]=array(
                    "ID" => $wallet_details->ID,
                    "Wallet_network" => $wallet_details->Wallet_network,
                    "Wallet_Symbol" => $wallet_details->Wallet_Symbol,
                    "Wallet_icon"=> url('').'/images/coins/'.$wallet_details->Wallet_icon,
                    "Status" => $wallet_details->Status,
                    "Network_mode" => $wallet_details->Network_mode
                 );
    
    
          }

        
        
        if($get_response)
        {
           
            $get_network=DB::table('wallet_network')->where('ID',$network)->first();
            if($network=='0')
            {
                $network_display="All";
                $get_address= DB::table('wallet_addressbook')->get();
                $wordcount=$get_address->count();
            }
            else
            {
                //$network_display=$get_network;
                
                $network_display[]=array(
                "ID" => $get_network->ID,
                "Wallet_network" => $get_network->Wallet_network,
                "Wallet_Symbol" => $get_network->Wallet_Symbol,
                "Wallet_icon"=> url('').'/images/coins/'.$get_network->Wallet_icon,
                "Status" => $get_network->Status,
                "Network_mode" => $get_network->Network_mode


            );
                $get_address= DB::table('wallet_addressbook')->where('network_mode',$network)->get();
                $wordcount=$get_address->count();
            }

           
            $pass_data=array(
                "network_mode" => $network,
                "userid" => $wallet_user,
                "totalrecords" => $wordcount,
                "network_selected" => $network_display,
                "network_selected_id" => $network,
               
            );

            if($get_address)
            {
                $pass_data['wallet_info']=$get_address;
            }
            else
            {
                $pass_data['wallet_info']='';    
            }
            
            $pass_data['network_list']=$network_list;
            $pass_data['network_count']=$wordCounts;


             $data = [
                'success' => true,
                'message' => 'Wallet address book retrived successfully',
                'walletbook' => $pass_data,
                'totalrecords' => $wordcount,
                'network'=>$network,
                'redirect' => 'wallet_addressbook'
            ];
        }
        else
        {

            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_addressbook'
            ];

        }

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

    }
    // import wallet functions

    public function walletimport_private(Request $request)
    {
        
         Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        $network = $request->input('network');
        $private_key = $request->input('private_key');
        $wallet_name = $request->input('wallet_name');
        $password= md5($request->input('password'));
        $hint = $request->input('hint');
        
        $wallet_user=$request->input('userid');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        
        if($wallet_name=='')
        {
             $data = [
                'success' => false,
                'message' => 'wallet name required. cannot be empty',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_import'
            ];
            
        }
        else if($password=='' || $password=='null')
        {
             $data = [
                'success' => false,
                'message' => 'Password is required. cannot be empty',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_import'
            ];
            
        }
        else
        {

            $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
            if($get_response)
            {
                    
                    $flag=0;
                    $count=0;
                    if($network=='0' || $network=='')
                    {
                        
                         $get_networks=DB::table('wallet_network')->where('Status','1')->get();
                         foreach($get_networks as $networks)
                         {
                             $verified=$this->valid_private($networks->ID,$private_key);
                             if($verified['valid']==true)
                             {
                                 $flag=1;
                                 $check_data=array(
                                    "wallet_user_id" => $get_response->Id,
                                    "wallet_area" => $verified['message'],
                                    "network_mode" => $networks->ID
                                 );
                                 $check_wallet = DB::table('wallet_generation')->where($check_data)->first();
                                 if(empty($check_wallet))
                                 {
                                     $count++;
                                      $date=date("Y-m-d H:i:s");
                                      $number_of_digits = 12;
                                      if($wallet_name=='')
                                        $wallet_name=$get_network->Wallet_Symbol.'-'.substr(str_shuffle("0123456789"), 0, 5);
                                    
                                       $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
                                        $store_data=array(
                                        "wallet_id"=> $wallet_id,
                                        "wallet_name"=> $wallet_name,
                                        "network_mode" => $networks->ID,
                                        "wallet_user_id" => $get_response->Id,
                                        "hint" => $hint,
                                        "wallet_password" => $password,
                                        "wallet_type" => '3',
                                        "wallet_area" => $verified['message'],
                                        "wallet_secrets" => $private_key,
                                        "created_date" => $date 
                                        );
                                    $result=DB::table('wallet_generation')->insert($store_data);
                                     
                                 }//new wallet generate
                                
                                 
                                 
                             }//verified true
                        
                             
                            
                             
                         }//foreach
                         
                         if($flag=='0')
                         {
                              $data = [
                                'success' => false,
                                'message' => 'Requested Private key Not matched any networks',
                                'totalrecords' => 0,
                                'network'=>$network,
                                'redirect' => 'wallet_import'
                            ];
                             
                         }
                         else if($flag=='1')
                         {
                             if($count=='0')
                             {
                             
                                $data = [
                                'success' => false,
                                'message' => 'Import Requested private key address already available on account!',
                                'totalrecords' => 0,
                                'network'=>$network,
                                'redirect' => 'wallet_import'
                                ];
                             }
                             else
                             {
                                 
                                $check_data=array(
                                    "wallet_user_id" => $get_response->Id,
                                    "wallet_secrets" => $private_key
                                 );
                                 $check_wallet = DB::table('wallet_generation')->where($check_data)->orderBy('Id','DESC')->first();
                                 
                                $get_network=DB::table('wallet_network')->where('ID',$check_wallet->network_mode)->first(); 
                                
                                $balance=$this->getbalance($check_wallet->network_mode,$check_wallet->wallet_area);
                                
                                $pass_data=array(
                                "network_mode" => $check_wallet->network_mode,
                                "wallet_id" => $check_wallet->wallet_id,
                                
                                "userid" => $wallet_user,
                                "address" => $check_wallet->wallet_area,
                                "wallet_type" => '3',
                                "wallet_label" =>'Imported',
                                "wallet_name" => $check_wallet->wallet_name,
                                "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
                                );
                                
                                $data = [
                                    'success' => true,
                                    'message' => 'Wallet successfully imported',
                                    'totalrecords' => 1,
                                    'network'=>$get_network->ID,
                                    'walletinfo' => $pass_data,
                                    'redirect' => 'Asset overview'
                                ];
                                 
                                 
                             }
                         
                         }
                         
                     
                       
                    }
                    else
                    {
                        $verified= $this->valid_private($network,$private_key);
                        if($verified['valid']==true)
                        {
                            $check_data=array(
                                "wallet_user_id" => $get_response->Id,
                                "wallet_area" => $verified['message'],
                                "network_mode" => $network
            
                            );
                            //$check_wallet=DB::table('wallet_addressbook')->where($check_data)->where('Id','!=',$contact_id)->first();
                            $check_wallet = DB::table('wallet_generation')->where($check_data)->first();
                        
                        
                            if(empty($check_wallet))
                            {
                                $date=date("Y-m-d H:i:s");
                                $number_of_digits = 12;
                                if($wallet_name=='')
                                    $wallet_name=$get_network->Wallet_Symbol.'-'.substr(str_shuffle("0123456789"), 0, 5);
                                $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
                                $store_data=array(
                                    "wallet_id"=> $wallet_id,
                                    "wallet_name"=> $wallet_name,
                                    "network_mode" => $network,
                                    "wallet_user_id" => $get_response->Id,
                                    "hint" => $hint,
                                    "wallet_password" => $password,
                                    "wallet_type" => '3',
                                    "wallet_area" => $verified['message'],
                                    "wallet_secrets" => $private_key,
                                    "created_date" => $date 
                                );
                    
                                $result=DB::table('wallet_generation')->insert($store_data);
                                
                                
                                $balance=$this->getbalance($network,$verified['message']);
                                
                                $pass_data=array(
                                "network_mode" => $network,
                                "wallet_id" => $wallet_id,
                                "userid" => $wallet_user,
                                "address" => $verified['message'],
                                "wallet_type" => '3',
                                "wallet_label" =>'Imported',
                                "wallet_name" => $wallet_name,
                                "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
                                );
                                
                                $data = [
                                    'success' => true,
                                    'message' => 'Wallet successfully imported',
                                    'totalrecords' => 1,
                                    'network'=>$network,
                                    'walletinfo' => $pass_data,
                                    'redirect' => 'Asset overview'
                                ];
                                
                                
                                
            
                            }
                            else
                            {
                                $data = [
                                    'success' => false,
                                    'message' => 'Import Requested private key address already available on account!. Here is :'.$private_key,
                                    'totalrecords' => 0,
                                    'network'=>$network,
                                    'redirect' => 'wallet_import'
                                ];
                            }
                        
                        }
                        else
                        {
        
                            $data = [
                                'success' => false,
                                'message' => $verified['message'],
                                'totalrecords' => 0,
                                'network'=>$network,
                                'redirect' => 'wallet_import'
                            ];
                        }
                    }
                }
                else
                {
                    $data = [
                        'success' => false,
                        'message' => 'User Details not found. Please try again later',
                        'totalrecords' => 0,
                        'network'=>$network,
                        'redirect' => 'wallet_import'
                    ];
                }
            }
        return response()->json($data, 200); 
    }
    public function valid_private($network,$private_key)
    {
        $flag=0;
        if($network=='1')
        {

            $data = [
                'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-btcprivate"; 
           
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            

        }
        else if($network=='2' || $network=='3' || $network=='6')
        {
            $data = [
                'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-ethprivate"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            

        }
        else if($network=='4')
        {
            $data = [
                'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-tronprivate"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
           

        }
        else if($network=='5')
        {
            $data = [
               'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-solprivate"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
           

        }
        
        return $response;


    }
    
    
    public function walletimport_secret(Request $request)
    {
        $network = $request->input('network');
        $wallet_name = $request->input('wallet_name');
        $password= md5($request->input('password'));
        $hint = $request->input('hint');
        $private_key = $request->input('secret_key');
        $wallet_user=$request->input('userid');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();
        
        if($wallet_name=='')
        {
             $data = [
                'success' => false,
                'message' => 'wallet name required. cannot be empty',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_import'
            ];
            
        }
        else if($password=='')
        {
             $data = [
                'success' => false,
                'message' => 'Password is required. cannot be empty',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'wallet_import'
            ];
            
        }
        else
        {
        
                $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
                if($get_response)
                {
                    
                  
                    $verified= $this->valid_secert($network,$private_key);
                    
                   
                    
                    if($verified['valid']==true)
                    {
                        $check_data=array(
                            "wallet_user_id" => $get_response->Id,
                            "wallet_area" => $verified['message'],
                            "network_mode" => $network
        
                        );
                        //$check_wallet=DB::table('wallet_addressbook')->where($check_data)->where('Id','!=',$contact_id)->first();
        
                        $check_wallet = DB::table('wallet_generation')->where($check_data)->first();
                        if(empty($check_wallet))
                        {
                            if(is_array($private_key)) 
                            { 
                             
                                
                                $secret_phase= implode(",",$private_key);
                                $array_value = explode(" ",$secret_phase);
                                $quoted_array = array_map(function($item) { return "\"$item\""; }, $array_value);
                                $secret_phase= "[" . implode(",",$quoted_array) . "]";
                            }
                            else
                            {
                            
                                $array_value = explode(" ",$private_key);
                                $quoted_array = array_map(function($item) { return "\"$item\""; }, $array_value);
                                $secret_phase= "[" . implode(",",$quoted_array) . "]";
                            }
                            
                            $date=date("Y-m-d H:i:s");
                            $number_of_digits = 12;
                            if($wallet_name=='')
                                $wallet_name=$get_network->Wallet_Symbol.'-'.substr(str_shuffle("0123456789"), 0, 5);
                            $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
                             $store_data=array(
                                "wallet_id"=> $wallet_id,
                                "wallet_name"=> $wallet_name,
                                "network_mode" => $network,
                                "wallet_user_id" => $get_response->Id,
                                "wallet_type" => '3',
                                "wallet_area" => $verified['message'],
                                "hint" => $hint,
                                "wallet_password" => $password,
                                "secret_phase" => $secret_phase,
                                "wallet_secrets" => $verified['privatekey'],
                                "created_date" => $date 
                            );
                
                            $result=DB::table('wallet_generation')->insert($store_data);
                            
                            $balance=$this->getbalance($network,$verified['message']);
                            
                             $pass_data=array(
                            "network_mode" => $network,
                            "wallet_id" => $wallet_id,
                            "userid" => $wallet_user,
                            "address" => $verified['message'],
                            "wallet_type" => '3',
                            "wallet_name" => $wallet_name,
                            "wallet_balance" =>$balance.' '.$get_network->Wallet_Symbol
                            );
        
        
                            $data = [
                                'success' => true,
                                'message' => 'Wallet successfully imported',
                                'totalrecords' => 1,
                                'network'=>$network,
                                'walletinfo' => $pass_data,
                                'redirect' => 'Asset overview'
                            ];
        
                        }
                        else
                        {
                            $data = [
                                'success' => false,
                                'message' => 'Wallet address already exists',
                                'totalrecords' => 0,
                                'network'=>$network,
                                'redirect' => 'wallet_import'
                            ];
            
        
                        }
        
        
                    }
                    else
                    {
        
                        $data = [
                            'success' => false,
                            'message' => $verified['message'],
                            'totalrecords' => 0,
                            'network'=>$network,
                            'redirect' => 'wallet_import'
                        ];
        
                    }
                }
                else
                {
                    $data = [
                        'success' => false,
                        'message' => 'User Details not found. Please try again later',
                        'totalrecords' => 0,
                        'network'=>$network,
                        'redirect' => 'wallet_import'
                    ];
                }
            }      
                return response()->json($data, 200); 
    }

    
    
    
    public function valid_secert($network,$private_key)
    {
        $flag=0;
        if($network=='1')
        {

            $data = [
                'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-btcsecret"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
         
          

        }
        else if($network=='2' || $network=='3' || $network=='6')
        {
            $data = [
                'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-ethsecret"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
        }
        else if($network=='4')
        {
            $data = [
                'private_key' => $private_key,
            ];
            
            
            $url = "https://www.celluma.center/wallet/validate-tronsecret"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
           
            
           
           

        }
        else if($network=='5')
        {
            $data = [
               'private_key' => $private_key,
            ];
            $url = "https://www.celluma.center/wallet/validate-solsecret"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            

        }
        
        return $response;


    }
    
    public function get_verify($address, $network)
    {
        $flag=0;
        if($network=='1')
        {
            $data = [
                'address' => $address,
            ];
            $url = "https://www.celluma.center/wallet/validate-btc"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            

        }
        else if($network=='2' || $network=='3' || $network=='6')
        {

            $data = [
                'address' => $address,
                'network' => $network
            ];
            $url = "https://www.celluma.center/wallet/validate-address"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
        }
        else if($network=='4')
        {

            $data = [
                'address' => $address,
            ];
            $url = "https://www.celluma.center/wallet/validate-tron"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            

        }

        else if($network=='5')
        {

            $data = [
                'address' => $address,
            ];
            $url = "https://www.celluma.center/wallet/validate-sol"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
           

        }

        return $response;

    }
    
    public function updatewallets()
    {
        $get_wallets=DB::table('wallet_generation')->where('Status','1')->get();
        foreach($get_wallets as $get_wallet)
        {
            $secert_phase=$get_wallet->secret_phase;
            echo $secert_phase;
            echo "<br>";
            
        }
    }
    
    public function eth_address()
    {
        $generated_address=$this->generatewallet(2);
        return response()->json($generated_address, 200); 
        
    }
    
    public function btc_address()
    {
        $generated_address=$this->generatewallet(1);
        return response()->json($generated_address, 200); 
        
    }
    
    public function sol_address()
    {
        $generated_address=$this->generatewallet(5);
        return response()->json($generated_address, 200); 
        
    }
    
    public function tron_address()
    {
        $generated_address=$this->generatewallet(4);
        return response()->json($generated_address, 200); 
        
    }
    
    public function hdwallet_create(Request $request)
    {
        
        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        
        if($network!='')
        {
            
             $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
             if($get_response)
             {
            
                $secret_phase='';
                $networks='';
                foreach($network as $network)
                {
                    $networks=$network;
                    $get_response1=DB::table('wallet_generation')->where('wallet_user_id',$get_response->Id)->where('network_mode',$network)->where('status','0')->first();
                    
             
                   
                    if($get_response1)
                    {
                    
                        $secret_phase= $get_response1->secret_phase;
                        $update_data=array(
                        "Status" =>'1'
                        );
                        DB::table('wallet_generation')->where('Id',$get_response1->Id)->update($update_data);
                        //print_r($update_data);
                        //echo $get_response1->Id;
                    }
                   
                }
                
                
                $get_wallet_name=DB::table('wallet_generation')->where('wallet_user_id',$get_response->Id)->orderBy('Id','DESC')->first();
                
                
                 $get_network=DB::table('wallet_network')->where('ID',$network)->first();
                 $pass_data=array(
                    "network_mode" => $networks,
                    "wallet_id" => $get_wallet_name->wallet_id,
                    "userid" => $wallet_user,
                    "address" => $get_wallet_name->wallet_area,
                    "wallet_type" => "1",
                    "wallet_name" => $get_wallet_name->wallet_name,
                    "wallet_balance" =>'0.00 '.$get_network->Wallet_Symbol
                );

                $data = [
                    'success' => true,
                    'message' => 'Data retrieved successfully!',
                    'totalrecords' => 1,
                    'walletinfo' => $pass_data,
                    'redirect' => 'Asset_overview'
                ];
                
                
                
             }
             else
             {
                  $data = [
                    'success' => false,
                    'message' => 'User Details not found. Please try again later',
                    'totalrecords' => 0,
                    'network'=>$network,
                    'redirect' => 'hdwallet_create'
                ];
                 
                 
             }
              
        }
        else
        {
            
            $data = [
                    'success' => false,
                    'message' => 'No network selected. Atleast one needed',
                    'totalrecords' => 0,
                    'redirect' => 'hdwallet_create'
                    ];
            
        }
        
        return response()->json($data, 200); 
        
        
    }
    
     
    
    public function watch_address(Request $request)
    {
            Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        $network = $request->input('network');
        $wallet_user=$request->input('userid');
        $wallet_address=$request->input('wallet_address');
        $wallet_name=$request->input('wallet_name');
        $get_network=DB::table('wallet_network')->where('ID',$network)->first();

        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {

            if($wallet_name=='')
            {
                $data = [
                    'success' => false,
                    'message' => 'Wallet Name Required. cannot be empty',
                    'totalrecords' => 0,
                    'redirect' => 'watch_wallet'
                ];

            }
            else if($wallet_address=='')
            {
                $data = [
                    'success' => false,
                    'message' => 'Wallet address Required. cannot be empty',
                    'totalrecords' => 0,
                    'redirect' => 'watch_wallet'
                ];

            }
            else
            {
                $check_wallet=$this->get_verify($wallet_address,$network);
                
               
               
                if($check_wallet['valid']==true)
                {
                    

                    $check_data=array(
                        "wallet_user_id" => $get_response->Id,
                        "wallet_area" => $wallet_address,
                        "network_mode" => $network
                    );
                    $check_wallet=DB::table('wallet_generation')->where($check_data)->first();
                    if(empty($check_wallet))
                    {
                        $number_of_digits = 12;
                        $wallet_id=substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
                        $pass_data=array(
                            "network_mode" => $network,
                            "wallet_id" => $wallet_id,
                            "wallet_user_id" => $get_response->Id,
                            "wallet_area" => $wallet_address,
                            "wallet_name" => $wallet_name,
                            "wallet_type" =>'4',
                            "created_date" => date("Y-m-d H:i:s")
                        );
                        $result=DB::table('wallet_generation')->insert($pass_data);
                        
             
                        
                        
                             $pass_data1=array(
                            "network_mode" => $network,
                            "wallet_id" => $wallet_id,
                            "userid" => $wallet_user,
                            "address" =>$wallet_address,
                            "wallet_name" => $wallet_name,
                            "wallet_type" => "4",
                            "wallet_label" => "Watch",
                            "wallet_balance" =>'0.00 '.$get_network->Wallet_Symbol
                        );

                        $data = [
                            'success' => true,
                            'message' => "New address added successfully",
                            'totalrecords' => 1,
                            'walletinfo' => $pass_data1,
                            'redirect' => 'Asset_overview'
                        ];
                    }
                    else
                    {

                        $data = [
                            'success' => false,
                            'message' => 'The address already available selected network',
                            'totalrecords' => 0,
                            'network'=>$network,
                            'redirect' => 'wallet_addressbook'
                            ];

                    }
                }
                else
                {
                    $data = [
                        'success' => false,
                        'message' => 'The address does not match the selected network',
                        'totalrecords' => 0,
                        'network'=>$network,
                        'redirect' => 'watch_wallet'
                    ];

                }

            }

        }
        else
        {
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'watch_wallet'
            ];

        }

        return response()->json($data, 200); 
    }
    
    /*Asset overview*/
    
    public function wallet_info(Request $request)
    {
                Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $network=0;
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
     
        if($get_response)
        {
            $get_wallet=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
        
            if($get_wallet)
            {
                if($get_wallet->network_mode=='1')
                {
                    
                    $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'network' => $get_wallet->network_mode
                    ];
                    $url = "https://blockchain.info/balance?active=".$get_wallet->wallet_area; 
                    $ch = curl_init(); 
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                    curl_setopt($ch, CURLOPT_URL, $url); 
                    curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                    $res = curl_exec($ch); 
                   $response=json_decode($res,true);
                   
                   $balance=0;
                   $balance_usd=0;
                   
                   $get_values=file_get_contents('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,tether&vs_currencies=usd');
                   
                   $price_values=json_decode($get_values,true);
                 
                    $btc_price=$price_values['bitcoin']['usd'];
                    $usdt_price=$price_values['tether']['usd'];
                   
                   
                   
                   if(isset($response[$get_wallet->wallet_area]['final_balance'])) 
                   {
                        $balance=$response[$get_wallet->wallet_area]['final_balance'];
                        if($balance >0)
                            $balance=$balance/100000000;
                                
                    }
                    
                    $btc_20=array();
                    
                    $btc_20[]=array(
                        
                        "tokenName" => "BTC",
                        "tokenAddress" => $get_wallet->wallet_area,
                        "balance" => $balance,
                        "balanceInUSD" => number_format($balance * $btc_price,2),
                        "tokenPrice" => number_format($btc_price,2),
                        "tokenImage" => url('').'/images/coins/BTC.png'
                        );
                    
                    
                    $btc_20[]=array(
                        
                        "tokenName" => "USDT",
                        "tokenAddress" => $get_wallet->wallet_area,
                        "balance" =>'0.00',
                        "balanceInUSD" => "0.00",
                        "tokenPrice" => number_format($usdt_price,2),
                        "tokenImage" => 'https://static.tronscan.org/production/logo/usdtlogo.png'
                        );
                    
                    
                       $balance_info=array(
                        "ethBalance" => $balance,
                        "ethBalanceInUSD" => $balance_usd,
                        "tokenBalances" =>$btc_20
                        );
                    
                    
                   
                      
                       
                        $data = [
                        'success' => true,
                        'message' => $balance_info,
                        'totalrecords' => 1,
                        'network'=>$get_wallet->network_mode,
                        'redirect' => 'asset_overview'
                        ];
                        
                    
                    
                }
                else if($get_wallet->network_mode=='4')
                {
                      $url = "https://apilist.tronscanapi.com/api/account/tokens?address=".$get_wallet->wallet_area."&start=0&limit=20&hidden=0&show=0&sortType=0&sortBy=0&token=";
                      $ch = curl_init(); 
                      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                      curl_setopt($ch, CURLOPT_URL, $url); 
                      curl_setopt($ch, CURLOPT_POST, false);              // Use POST method
                      $res = curl_exec($ch); 
                      $response=json_decode($res,true);
                      $trx_balance=0;
                      $trc_20=array();
                      
                      if(isset($response['data'][0])) 
                      {
                         $account = $response['data'][0];
                         
                       
                         $trx_balance = $account['amount'];
                         $balance_usd = number_format($account['amountInUsd'],2);
                         
                          $flag=0;
                          foreach($response['data'] as $result)
                          {
                            if(!empty($result['amountInUsd']))
                            {
                                $amount=number_format($result['amountInUsd'],2);
                            }
                            else
                            {
                                $amount='0.00';
                            }
                              
                              if(!empty($result['tokenPriceInUsd']))
                              {
                                  $price=$result['tokenPriceInUsd'];
                              }
                              else
                              {
                                  $price='0.00';
                              }
                              
                              if($result['tokenId']=='_')
                              {
                                  $token_address=$get_wallet->wallet_area;
                              }
                              else
                              {
                                  $token_address=$result['tokenId'];
                              }
                              
                             
                             
                              if($result['tokenType']=='trc20' || $result['tokenId']=='_')
                              {
                                  if(strtoupper($result['tokenAbbr'])=='USDT')
                                  {
                                      $flag=1;
                                  }
                                        
                                        
                                        $trc_20[] = array(
                                                    "tokenName" => strtoupper($result['tokenAbbr']),
                                                  "tokenAddress" =>$token_address,
                                                    "balance" => number_format($result['quantity'],2),
                                                    "balanceInUSD" => $amount,
                                                    "tokenPrice" => number_format($price,2),
                                                    "tokenImage" => $result['tokenLogo']
                                                  );
                              }
                          }
                         
                         
                         
                          if($flag=='0')
                          {
                              $url = "https://apilist.tronscanapi.com/api/token_trc20?contract=TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&showAll=1&start=&limit=";
                              $ch = curl_init(); 
                              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                              curl_setopt($ch, CURLOPT_URL, $url); 
                              curl_setopt($ch, CURLOPT_POST, false);              // Use POST method
                              $res = curl_exec($ch); 
                              $response=json_decode($res,true);
                              
                              if(!empty($response['trc20_tokens'][0]))
                              {
                                  $tokeninfo=$response['trc20_tokens'][0];
                                  $trc_20[] = array(
                                                   "tokenName" => strtoupper($tokeninfo['symbol']),
                                                    "tokenAddress" =>'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
                                                    "balance" => '0.00',
                                                    "balanceInUSD" => '0.00',
                                                    "tokenPrice" => number_format($tokeninfo['market_info']['priceInUsd'],2),
                                                    "tokenImage" => $tokeninfo['icon_url']
                                                  );
                                  
                                  
                              }
                              
                              
                          }
                         
                         
                           $balance_info=array(
                            "ethBalance" => $trx_balance,
                            "ethBalanceInUSD" => $balance_usd,
                            "tokenBalances" =>$trc_20
                            );
                            
                                 
                         $data = [
                        'success' => true,
                        'message' => $balance_info,
                        'totalrecords' => 0,
                        'network'=>$get_wallet->network_mode,
                        'redirect' => 'asset_overview'
                        ];
                          
                          
                      }
                      else
                      {
                            $data = [
                            'success' => false,
                            'message' => 'Account not available',
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'asset_overview'
                            ];
                          
                      }
                      
                      
                     
                      
                }
                
                 else if($get_wallet->network_mode=='5')
                {
                     $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'network' => $get_wallet->network_mode
                    ];
                    $url = "https://www.celluma.center/wallet/sol_assets"; 
                    $ch = curl_init(); 
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                    curl_setopt($ch, CURLOPT_URL, $url); 
                    curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                    $res = curl_exec($ch); 
                   
                    $response=json_decode($res,true);
                    
               
                    
                     if($response['valid']=='1')
                    {
                      
                        $message=$response['valid'];
                        $data = [
                        'success' => true,
                        'message' => $response['message'],
                        'totalrecords' => 1,
                        'network'=>$get_wallet->network_mode,
                        'redirect' => 'asset_overview'
                        ];
                        
                    }
                    else
                    {
                         $data = [
                        'success' => false,
                        'message' => $response['message'],
                        'totalrecords' => 0,
                        'network'=>$get_wallet->network_mode,
                        'redirect' => 'asset_overview'
                        ];
                
                        
                    }
                    
                }
                
                else if($get_wallet->network_mode=='2' || $get_wallet->network_mode=='3' || $get_wallet->network_mode=='6')
                {
                    
                     $get_response=$this->get_tokenbalance($get_wallet->wallet_area,$get_wallet->network_mode);
                     
                     if(empty($get_response))
                     {
                         
                            $data = [
                            'success' => false,
                            'message' =>'Network loading error. please try again',
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'asset_overview'
                        ];
                         
                     }
                     else
                     {
                          $data = [
                            'success' => true,
                            'message' =>$get_response,
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'asset_overview'
                        ];
                       
                         
                     }
                    
                     
                    
                }
            }
            else
            {
                
                 $data = [
                'success' => false,
                'message' => 'Wallet Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
                ];
                
            }
            
        }
        else
        {
              
            $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'redirect' => 'asset_overview'
            ];
            

        }

       return response()->json($data, 200); 
    }
    
    public function getCoinGeckoData($address,$tron_address)
    {
        if($address!=$tron_address)
            $url = "https://api.coingecko.com/api/v3/coins/tron/contract/{$address}";
          else
            $url = "https://api.coingecko.com/api/v3/coins/tron/";
            
            
         
        
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_TIMEOUT, 30);
          $response = curl_exec($ch);
          curl_close($ch);
        
          if ($response === false) {
            return array();
          }
        
          $data = json_decode($response, true);
          
        
          // Return the relevant token data (USD price and image)
          if (isset($data['market_data']['current_price']['usd']) && isset($data['image']['small'])) {
            return array(
              'usd' => $data['market_data']['current_price']['usd'],
              'image' => $data['image']['small'],
              'name' => $data['symbol']
            );
          }
        
          return array();
        
        
    }
    
    public function receive_wallet(Request $request)
    {
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $get_wallet=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
            if($get_wallet)
            {
                if($get_wallet->network_mode=='1')
                {
                    $label='Only send Bitcoin to this address';
                }
                else if($get_wallet->network_mode=='2')
                {
                    $label='Only send ETH/ERC20 to this address';
                }
                else if($get_wallet->network_mode=='3')
                {
                    $label='Only send BSC/BEP20 to this address';
                }
                else if($get_wallet->network_mode=='4')
                {
                    $label='Only send TRX/TRC20 to this address';
                }
                else if($get_wallet->network_mode=='5')
                {
                    $label='Only send solana to this address';
                }
                else if($get_wallet->network_mode=='6')
                {
                    $label='Only send polygon to this address';
                }
                 
                  $data = [
                    'success' => true,
                    'message' => 'Wallet Details retrived',
                    'totalrecords' => 1,
                    'wallet_label' => $label,
                    'wallet_address' => $get_wallet->wallet_area,
                    'wallet_qrcode'=>"https://api.qrserver.com/v1/create-qr-code/?data=".$get_wallet->wallet_area."&size=200x200",
                    'network'=>$get_wallet->network_mode,
                    'redirect' => 'asset_overview'
                ];
                
                
            }
            else
            {
                 $data = [
                'success' => false,
                'message' => 'Wallet Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
                ];
                
            }
        }
        else
        {
              $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
            ];
            
        }
        
        return response()->json($data, 200); 
        
    }
    
    public function get_walletinfo(Request $request)
    {
        Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        
        $wallet_user=$request->input('userid');
        $wallet_id=$request->input('wallet_id');
        $selected_address=$request->input('token_address');
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $get_wallet=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
            if($get_wallet)
            {
                if($get_wallet->network_mode=='1')
                {   
                         $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $selected_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/btc_balance";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        
                       
                        
                              
                        if($response['valid']=='1')
                        {
                          
                            //$token_url="https://etherscan.io/address/".$selected_address;
                            $token_url="https://www.blockchain.com/explorer/addresses/btc/".$selected_address;
                            $message=$response['valid'];
                            $data = [
                            'success' => true,
                            'tokendetails'=>$token_url,
                            'tokeninfo' => $response['message'],
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'asset_overview'
                            ];
                            
                        }
                        else
                        {
                             $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'redirect' => 'asset_overview'
                            ];
                    
                            
                        }
                    
                }
                else if($get_wallet->network_mode=='2' || $get_wallet->network_mode=='3' || $get_wallet->network_mode=='6')
                {
                    
                     $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $selected_address,
                        'network' => $get_wallet->network_mode
                    ];
                    
                  
                    if(strtolower($get_wallet->wallet_area)==strtolower($selected_address))
                    {
                        $url = "https://www.celluma.center/wallet/eth_balance";
                        if($get_wallet->network_mode=='2')
                            $token_url="https://etherscan.io/address/".$selected_address;
                        else if($get_wallet->network_mode=='3')
                            $token_url="https://bscscan.com/address/".$selected_address;
                        else
                           $token_url="https://polygonscan.com/address/".$selected_address; 
                            
                    }
                    else
                    {
                        $url = "https://www.celluma.center/wallet/eth_token";
                        
                       
                        if($get_wallet->network_mode=='2')
                            $token_url="https://etherscan.io/token/".$selected_address;
                        else if($get_wallet->network_mode=='3')
                            $token_url="https://bscscan.com/token/".$selected_address;
                        else
                           $token_url="https://polygonscan.com/token/".$selected_address; 
                    }
                    
                  
                    $ch = curl_init(); 
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                    curl_setopt($ch, CURLOPT_URL, $url); 
                    curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                    $res = curl_exec($ch); 
                    $response=json_decode($res,true);
                    
                
               
                    
                    if($response['valid']=='1')
                    {
                      
                        
                        $message=$response['valid'];
                        $data = [
                        'success' => true,
                        'tokendetails'=>$token_url,
                        'tokeninfo' => $response['message'],
                        'totalrecords' => 1,
                        'network'=>$get_wallet->network_mode,
                        'redirect' => 'asset_overview'
                        ];
                        
                    }
                    else
                    {
                         $data = [
                        'success' => false,
                        'message' => $response['message'],
                        'totalrecords' => 0,
                        'redirect' => 'asset_overview'
                        ];
                
                        
                    }
                    
                }
               
                else if($get_wallet->network_mode=='4')
                {
                     $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $selected_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/tron_balance";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        if($response['valid']=='1')
                        {
                          
                            //$token_url="https://etherscan.io/address/".$selected_address;
                            $token_url="https://tronscan.org/#/address/".$selected_address;
                            $message=$response['valid'];
                            $data = [
                            'success' => true,
                            'tokendetails'=>$token_url,
                            'tokeninfo' => $response['message'],
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'asset_overview'
                            ];
                            
                        }
                        else
                        {
                             $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'redirect' => 'asset_overview'
                            ];
                    
                            
                        }
                    
                }
                else if($get_wallet->network_mode=='5')
                {
                    
                    
                }
                
                
            }
            else
            {
                $data = [
                'success' => false,
                'message' => 'Wallet Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
                ];
                
            }
            
        }
        else
        {
            
             $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
            ];
            
        }
            
        return response()->json($data, 200); 
        
    }
    
    public function send_wallet(Request $request)
    {
        Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        $wallet_user=$request->input('userid');
        $network = $request->input('network');
        $wallet_id=$request->input('wallet_id');
        $receive_address=$request->input('receive_address');
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $get_wallet=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
            if($get_wallet)
            {
                
                
            }
            else
            {
                $data = [
                'success' => false,
                'message' => 'Wallet Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
                ];
                
            }
        }
        else
        {
             $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
            ];
            
        }
        
        return response()->json($data, 200); 
        
    }
    
    public function get_sendwallet(Request $request)
    {
        Log::info('Request Logged:', [
            'method' => $request->method(),
            'url' => $request->fullUrl(),
            'headers' => $request->headers->all(),
            'input' => $request->all(),
            'ip' => $request->ip(),
        ]);
        
        $wallet_user=$request->input('userid');
        $network = $request->input('network');
        $wallet_id=$request->input('wallet_id');
        $receive_address=$request->input('token_address');
        $get_response=DB::table('wallet_users')->where('generated_Id',$wallet_user)->first();
        if($get_response)
        {
            $get_wallet=DB::table('wallet_generation')->where('wallet_id',$wallet_id)->first();
            if($get_wallet)
            {
                
                $get_wallets=DB::table('wallet_generation')->where('Status','1')->where('wallet_user_id',$get_response->Id)->where('network_mode',$get_wallet->network_mode)->get();
                
           
                $wordCount = $get_wallets->count();
                if($wordCount >0)
                {
                    
                    $wallets=array();
                    foreach($get_wallets as $wallet_details)
                    {
                        $get_networkinfo=DB::table('wallet_network')->where("ID",$wallet_details->network_mode)->first();
                        if($wallet_details->wallet_type=='1')
                        {
                            $wallet_label="Created";
                        }
                        else if($wallet_details->wallet_type=='2')
                        {
                            $wallet_label="HD";
                        }
                        else if($wallet_details->wallet_type=='3')
                        {
                            $wallet_label="Import";
                        }
                        else
                        {
                            $wallet_label="Watch";
                        }
                        
                        if($wallet_details->wallet_id!=$wallet_id)
                        {
                            $wallets[]=array(
                            "wallet_id" => $wallet_details->wallet_id,
                            "wallet_name" => $wallet_details->wallet_name,
                            "wallet_address" => $wallet_details->wallet_area,
                            "wallet_type" => $wallet_details->wallet_type,
                            "Wallet_icon"=> url('').'/images/coins/'.$get_networkinfo->Wallet_icon,
                            "wallet_label" => $wallet_label
                            );
                        }
                    }
                }
                
                $get_walletbook=DB::table('wallet_addressbook')->where('wallet_user_id',$get_response->Id)->where('network_mode',$get_wallet->network_mode)->get();
                $walletbook=array();
            
                 if($get_walletbook)
                 {
                     foreach($get_walletbook as $walletbooks)
                     {
                         $walletbook[]=array(
                            "wallet_id" => $walletbooks->Id,
                            "wallet_name" => $walletbooks->wallet_name,
                            "wallet_address" => $walletbooks->wallet_address
                        );
                         
                     }
                 }
                 
                 $recents="";
                 if($get_wallet->network_mode=='2' || $get_wallet->network_mode=='3' || $get_wallet->network_mode=='6')
                 {
                     
                      $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $receive_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/sendeth_network";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        
                        if($response['valid']=='1')
                        {
                            $message=$response['message'];
                            $choose_wallets=array(
                                "recents" => $message['transactions']['all'],
                                "wallets" => $wallets,
                                "addressbook" => $walletbook,
                            );
                            $data = [
                            'success' => true,
                            'message' => 'Wallet Details Available',
                            'Balance' => $message['Balance'],
                            'BalanceInUSD' => $message['BalanceInUSD'],
                            'NetworkFee' => $message['NetworkFee'],
                            'MaxFee' => $message['MaxFee'],
                            'choose_wallets'=>$choose_wallets,
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                            
                        }
                        else
                        {
                            
                            $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                        }
                        
                        
                     
                     
                 }
                 else if($get_wallet->network_mode=='1')
                 {
                      $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $receive_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/sendbtc_network";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        
                      
                        
                        if($response['valid']=='1')
                        {
                            $message=$response['message'];
                            
                            $choose_wallets=array(
                                "recents" => $message['transactions']['all'],
                                "wallets" => $wallets,
                                "addressbook" => $walletbook,
                            );
                            $data = [
                            'success' => true,
                            'message' => 'Wallet Details Available',
                            'Balance' => $message['Balance'],
                            'BalanceInUSD' => $message['BalanceInUSD'],
                            'NetworkFee' => $message['NetworkFee'],
                            'MaxFee' => $message['MaxFee'],
                            'choose_wallets'=>$choose_wallets,
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                            
                        }
                        else
                        {
                            
                            $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                        }
                     
                     
                 }
                 
                 else if($get_wallet->network_mode=='4')
                 {
                      $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $receive_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/sendbtc_network";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        
                        echo '<pre>';
                        print_r($data);
                        echo '</pre>';
                        
                        print_r($response);
                        exit;
                        
                        if($response['valid']=='1')
                        {
                            $message=$response['message'];
                            
                            $choose_wallets=array(
                                "recents" => $message['transactions']['all'],
                                "wallets" => $wallets,
                                "addressbook" => $walletbook,
                            );
                            $data = [
                            'success' => true,
                            'message' => 'Wallet Details Available',
                            'Balance' => $message['Balance'],
                            'BalanceInUSD' => $message['BalanceInUSD'],
                            'NetworkFee' => $message['NetworkFee'],
                            'MaxFee' => $message['MaxFee'],
                            'choose_wallets'=>$choose_wallets,
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                            
                        }
                        else
                        {
                            
                            $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                        }
                     
                     
                 }
                 else
                 {
                     
                      $data = [
                        'private_key' => $get_wallet->wallet_area,
                        'tokenAddress' => $receive_address,
                        'network' => $get_wallet->network_mode
                        ];
                    
                        $url = "https://www.celluma.center/wallet/sendbtc_network";
                        $ch = curl_init(); 
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
                        curl_setopt($ch, CURLOPT_URL, $url); 
                        curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
                        $res = curl_exec($ch); 
                        $response=json_decode($res,true);
                        
                        echo '<pre>';
                        print_r($data);
                        echo '</pre>';
                        
                        print_r($response);
                        exit;
                        
                        if($response['valid']=='1')
                        {
                            $message=$response['message'];
                            
                            $choose_wallets=array(
                                "recents" => $message['transactions']['all'],
                                "wallets" => $wallets,
                                "addressbook" => $walletbook,
                            );
                            $data = [
                            'success' => true,
                            'message' => 'Wallet Details Available',
                            'Balance' => $message['Balance'],
                            'BalanceInUSD' => $message['BalanceInUSD'],
                            'NetworkFee' => $message['NetworkFee'],
                            'MaxFee' => $message['MaxFee'],
                            'choose_wallets'=>$choose_wallets,
                            'totalrecords' => 1,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                            
                        }
                        else
                        {
                            
                            $data = [
                            'success' => false,
                            'message' => $response['message'],
                            'totalrecords' => 0,
                            'network'=>$get_wallet->network_mode,
                            'redirect' => 'send_transaction'
                            ];
                        }
                     
                     
                 }
                 
                
                
                
            }
            else
            {
                $data = [
                'success' => false,
                'message' => 'Wallet Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
                ];
                
            }
        }
        else
        {
             $data = [
                'success' => false,
                'message' => 'User Details not found. Please try again later',
                'totalrecords' => 0,
                'network'=>$network,
                'redirect' => 'asset_overview'
            ];
            
        }
        
        return response()->json($data, 200); 
        
    }
    /*Asset overview*/
    
    public function multiplewallet()
    {
        
         $network = ['1', '2', '3', '4', '5', '6'];
        
            $data = [
                'networks' => $network,
            ];
            $url = "https://www.celluma.center/wallet/hd_create"; 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POST, true);              // Use POST method
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
            $res = curl_exec($ch); 
            $response=json_decode($res,true);
            
         return $response;
        
    }
    /*new function for token assets*/
    
    public function get_tokenbalance($address,$network)
    {
        
                
                 $curl = curl_init();
                       
                if($network=='2')
                {
        
                        curl_setopt_array($curl, [
                      CURLOPT_URL => "https://api.g.alchemy.com/data/v1/osE1V2duLnkpgNVEwkd3AVFabVUaG1AQ/assets/tokens/by-address",
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_ENCODING => "",
                      CURLOPT_MAXREDIRS => 10,
                      CURLOPT_TIMEOUT => 30,
                      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                      CURLOPT_CUSTOMREQUEST => "POST",
                      CURLOPT_POSTFIELDS => json_encode([
                        'addresses' => [
                            [
                                    'address' => $address,
                                    'networks' => ['eth-mainnet']
                            ]
                        ],
                        'withMetadata' => true,
                        'withPrices' => true
                      ]),
                      CURLOPT_HTTPHEADER => [
                        "accept: application/json",
                        "content-type: application/json"
                      ],
                    ]);
                }
                else if($network=='3')
                {
                       curl_setopt_array($curl, [
                      CURLOPT_URL => "https://api.g.alchemy.com/data/v1/osE1V2duLnkpgNVEwkd3AVFabVUaG1AQ/assets/tokens/by-address",
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_ENCODING => "",
                      CURLOPT_MAXREDIRS => 10,
                      CURLOPT_TIMEOUT => 30,
                      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                      CURLOPT_CUSTOMREQUEST => "POST",
                      CURLOPT_POSTFIELDS => json_encode([
                        'addresses' => [
                            [
                                    'address' => $address,
                                    'networks' => ['bnb-mainnet']
                            ]
                        ],
                        'withMetadata' => true,
                        'withPrices' => true
                      ]),
                      CURLOPT_HTTPHEADER => [
                        "accept: application/json",
                        "content-type: application/json"
                      ],
                    ]);
                    
                }
                else if($network=='6')
                {
                       curl_setopt_array($curl, [
                      CURLOPT_URL => "https://api.g.alchemy.com/data/v1/osE1V2duLnkpgNVEwkd3AVFabVUaG1AQ/assets/tokens/by-address",
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_ENCODING => "",
                      CURLOPT_MAXREDIRS => 10,
                      CURLOPT_TIMEOUT => 30,
                      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                      CURLOPT_CUSTOMREQUEST => "POST",
                      CURLOPT_POSTFIELDS => json_encode([
                        'addresses' => [
                            [
                                    'address' => $address,
                                    'networks' => ['polygon-mainnet']
                            ]
                        ],
                        'withMetadata' => true,
                        'withPrices' => true
                      ]),
                      CURLOPT_HTTPHEADER => [
                        "accept: application/json",
                        "content-type: application/json"
                      ],
                    ]);
                    
                }
                
                else if($network=='5')
                {
                       curl_setopt_array($curl, [
                      CURLOPT_URL => "https://api.g.alchemy.com/data/v1/osE1V2duLnkpgNVEwkd3AVFabVUaG1AQ/assets/tokens/by-address",
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_ENCODING => "",
                      CURLOPT_MAXREDIRS => 10,
                      CURLOPT_TIMEOUT => 30,
                      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                      CURLOPT_CUSTOMREQUEST => "POST",
                      CURLOPT_POSTFIELDS => json_encode([
                        'addresses' => [
                            [
                                    'address' => $address,
                                    'networks' => ['eth-mainnet']
                            ]
                        ],
                        'withMetadata' => true,
                        'withPrices' => true
                      ]),
                      CURLOPT_HTTPHEADER => [
                        "accept: application/json",
                        "content-type: application/json"
                      ],
                    ]);
                    
                }
        
            $response = curl_exec($curl);
            $err = curl_error($curl);
            curl_close($curl);
            if($err) 
            {
                return false;
            } 
            else 
            {

                $response=json_decode($response,true);
                $eth_balance=0;
                $eth_balanceusd=0;
                
               if($response)
               {
                   if(!empty($response['data']['tokens']))
                   {
                      
                        $tokeninfo=array();
                        $tokendetails=$response['data']['tokens'];
            
                         $usd_price1=0;
                         $usd_balance1=0;
                         if(!empty($tokendetails[0]['tokenPrices'][0]['value']))
                         {
                            $usd_price1=$tokendetails[0]['tokenPrices'][0]['value'];
                         }
             
                         $token_balance=$this->original_values($tokendetails[0]['tokenBalance'],18);
                         $usd_balance1=$token_balance * $usd_price1;
                         $eth_balance=number_format($token_balance,4);
                         $eth_balanceusd=number_format($usd_balance1,2);
                         if($network=='2')
                         {
                             $name='ETH';
                             $logo=url('').'/images/coins/ETH.png';
                         }
                         else if($network=='3')
                         {
                             $name='BNB';
                            $logo=url('').'/images/coins/BNB.png';
                         }
                         else if($network=='6')
                         {
                             $name='POL';
                             $logo=url('').'/images/coins/MATIC.png';
                             
                         }
                        
                        $tokeninfo[]=array(
                                "tokenName" => $name,
                                "tokenAddress" => $tokendetails[0]['address'],
                                "balance" => number_format($token_balance,4),
                                "balanceInUSD" =>number_format($usd_balance1,2),
                                "tokenPrice" => number_format($usd_price1,2),
                                "tokenImage" =>$logo
                            );
                        
            
                            foreach($tokendetails as $tokendetails)
                            {
                
                
                                if(!empty($tokendetails['tokenMetadata']))
                                {
                    
                    
                                    $usd_price=0;
                                    if(!empty($tokendetails['tokenPrices'][0]['value']))
                                    {
                                        $usd_price=$tokendetails['tokenPrices'][0]['value'];
                                    }
                    
                                    $tokenbalance=$this->original_values($tokendetails['tokenBalance'],$tokendetails['tokenMetadata']['decimals']);
                    
                                    if($tokendetails['tokenMetadata']['decimals'] >6)
                                    {
                                        $tokenbalance=number_format($tokenbalance,6);
                                        $tokenbalance1=str_replace(',','',$tokenbalance);
                                    }
                                    else
                                    {
                                         $tokenbalance1=str_replace(',','',$tokenbalance);
                                    }
                                     $usd_balance=$tokenbalance1 * $usd_price;
                                    
                                    if($tokenbalance=='0')
                                        $tokenbalance=0;
                                        
                                      if(!empty($tokendetails['tokenMetadata']['logo']))
                                        $display_logo=$tokendetails['tokenMetadata']['logo'];
                                        else
                                        {
                                            if($network=='2')
                                                $display_logo="https://static.cx.metamask.io/api/v1/tokenIcons/1/".$tokendetails['tokenAddress'].".png";   
                                            else if($network=='3')
                                                $display_logo="https://static.cx.metamask.io/api/v1/tokenIcons/56/".$tokendetails['tokenAddress'].".png";
                                            else if($network=='6')
                                                $display_logo="https://static.cx.metamask.io/api/v1/tokenIcons/137/".$tokendetails['tokenAddress'].".png";
                                        }
                                        
                                        $image_url=$this->isImageValid($display_logo);
                                    
                                    $verify_token=$this->isTokenValid($tokendetails['tokenMetadata']['symbol']);
                                    if($verify_token && $image_url!='')
                                    {
                                        $tokeninfo[]=array(
                                        "tokenName" => $tokendetails['tokenMetadata']['symbol'],
                                        "tokenAddress" => $tokendetails['tokenAddress'],
                                        "balance" => $tokenbalance,
                                        "balanceInUSD" => number_format($usd_balance,2),
                                        "tokenPrice" => number_format($usd_price,2),
                                        "tokenImage" =>$display_logo
                                        );
                                    }
                                }
                
                            }
                            
                            $message=array(
                                "ethBalance" => $eth_balance,
                                "ethBalanceInUSD" => $eth_balanceusd,
                                "tokenBalances" => $tokeninfo
                                
                                );
                            
                            
            
                          return $message;
            
                        }
       
                    }
                }
        
        
        
    }
    public function isImageValid($imageUrl) 
    {
        // Get the headers of the image URL
        $headers = @get_headers($imageUrl, 1);
        
        // Check if headers are fetched successfully
        if ($headers === false) {
        
            return false;
        }
    
        // Check if the status code is 200 OK and if the content-type is an image
        if (strpos($headers[0], '200 OK') !== false) {
            if (isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'image/') !== false) {
                
                return true; // Valid image
            } else {
              
                return false; // Not an image
            }
        } else {
          
            return false; // URL returned an error status
        }
    }
    
    public function original_values($balance,$decimals)
    {
        $decimal_balance = hexdec($balance);
        $normalized_balance = $decimal_balance / pow(10, $decimals);
        return $normalized_balance;
    }
    
    public function isTokenValid($symbol) 
    {
        
        $spamPatterns = [
        'http://', 'https://', 'reward', 'rewards', 'claim',
        'airdrop', 'free', 'phish', 'phishing', 'scam',
        'spam', 'token', 'erc20', 'bep20', 'website',
        'visit', '.com', '.org', '.net', '.io'
        ];
        $symbolLower = strtolower($symbol);
    
        // Check if any spam pattern exists in the token symbol
        foreach ($spamPatterns as $pattern) {
            if (strpos($symbolLower, $pattern) !== false) {
               
                return false;  // Skip this token symbol
            }
        }
        return true;
    
        
    }

    
    
    
}


