<?php

namespace App\Http\Controllers;

use App\City;
use App\Mail\Signup;
use App\Mail\UserStatus;
use App\memberType;
use App\Module;
use App\RegistrationFees;
use App\Http\Controllers\Paytm\PaytmPG;
use App\State;
use App\User;
use App\UserRegistration;
use App\UserRejectReason;
use App\Wallet;
use App\UserMaster;
use App\MemberIdPlan;
use Exception;
use File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Http;

use Carbon\Carbon;

class Members extends Controller
{

    public function index()
    {
        
        if (request()->role == "") {
            $user = User::with('parent')->newQuery();
            if (request()->has('loginId') && request()->input('loginId') != '') {
                $loginId = request()->input('loginId');
                $user->where('loginId', '=', "$loginId");
            }
            if (request()->has('name') && request()->input('name') != '') {
                $name = request()->input('name');
                $user->where('name', 'Like', "%$name%");
            }
            if (request()->has('contact') && request()->input('contact') != '') {
                $contact = request()->input('contact');
                $user->where('contact', '=', "$contact");
            }
            if (request()->has('aadhar') && request()->input('aadhar') != '') {
                $aadhar = request()->input('aadhar');
                $user->where('aadhar', 'LIKE', "%$aadhar%");
            }
            if (request()->has('status') && request()->input('status') != '') {
                if ($user->has("module")->get() != null) {
                    $status = request()->input('status');
                    if ($status == "approved") {
                        $user->whereHas("module", function ($q) {
                            $q->where(["module_slug" => "account", "module_sta" => 1]);
                        });
                    } else if ($status == "rejected") {
                        $user->whereHas("module", function ($q) {
                            $q->where(["module_slug" => "account", "module_sta" => 0]);
                        });
                    } 
                }

            }

            $members = $user->orderBy("created_at", "desc")->paginate(10);
           
            return view("members.index", compact("members"));
        } else {
            return view("auth.invalid");

        }
    }
    
    
    
    
    
            public function users(){
        
        if (request()->role == "") {
            $user = User::with('parent')->newQuery();
             $user->where('subadmin', '=', 1);
           

            $members = $user->orderBy("created_at", "desc")->paginate(10);
            
            // echo "<pre>";
            // print_r($members); exit;
           
            return view("members.subadmin", compact("members"));
        } else {
            return view("auth.invalid");

        }
    }
    
    public function subadmincreate()
    {

        $memberType = $this->getMemberType();
        $states = State::all();
        $profile = new User();

        //  $city= City::all();
        return view('members.subadmincreate', compact('memberType', 'states', 'profile'));
    }
    
      public function subadminstore(User $user)
    {
        $file_name = "";
        request()->validate([
            'email' => 'unique:users',
            'contact' => 'required|unique:users',
        ]);
		
        $usersId = DB::table('users')->max('id') + 1;
        $userID = request()->input("package_type") . env('LOGINSATECODE') . rand(100, 999) . "" . $usersId;
		$six_digit_random_number = random_int(100000, 999999);
        $user->member_type = 0;
        $user->package_type = 'SA';
		$user->tpin = $six_digit_random_number;
        $rand = Str::random(8);
        $user->password = Hash::make($rand);
		$user->password_new =$rand;
        $user->profilePic = 0;
        $user->name = request()->input("first_name");
        $user->owner_id = auth()->user()->id;
        $user->last_name = request()->input("last_name");
        $user->account_no = 0;
        $user->ifsc_code = 0;
        $user->aadhar = 0;
        $user->shop_name = 0;
        $user->shop_address = 0;
        $user->gst_number = 0;
        $user->bpancard = 0;
        $user->pancard = 0;
        $user->address = 0;
        $user->country = 0;
        $user->state = 0;
        $user->city = 0;
        $user->post_code = 0;
        $user->email = request()->input("email");
        $user->contact = request()->input("contact");
        //$user->landStd = request()->input("landStd");
        //$user->landNumber = request()->input("landNumber");
		//$user->terminal_id = 0;
        $user->loginId = $userID;
        $user->show_login_id = $userID; 
        $user->subadmin = 1;
        $user->save();
        $memberType = \App\RegistrationFees::whereHas('memberType', function ($q) {$q->where('code', '=', request()->input("package_type"));})->first();
      //  $this->deductFromWallet($user->id, $memberType->reg_fee, "Registration Fees");
        //Mail::to($user->email)->bcc("diospays@gmail.com")->send(new Signup($user, $rand,$six_digit_random_number));
        Mail::to($user->email)->send(new Signup($user, $rand,$six_digit_random_number));
        if ($user) {
            Session::flash('success', 'New user added successfully');

        } else {
            Session::flash('error', 'Something went wrong !');
        }
        return back();
    }
    
    
    
    
        public function getsubadminProfile()
    {

        // print_r(request()->input());
        $user = User::where(["id" => request()->input("id")])->first();
        $rejectReason = UserRejectReason::where(["user_id" => request()->input("id")])->get();

        return view("members.subadminProfile", compact("user", "rejectReason"));
    }
    
    
         public function subadminapproveUser()
    {
       
        $module = Module::updateOrCreate(["user_id" => Crypt::decrypt(request()->input("id")), "module_slug" => "account"], ["module_sta" => 1, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        //**KYC approved */
        User::where([
            "id" => Crypt::decrypt(request()->input("id")),
        ])->update(["kyc_status" => 1]);
        
        //  KycUser::where([
        //     "user_id" => Crypt::decrypt(request()->input("id")),
        // ])->update(["kyc_status" => 2]);
        
      
        $user_id=Crypt::decrypt(request()->input("id"));


           $user_details=\App\User::where('id',$user_id)->first();


        if ($module) {
            $user = User::find($module->user_id);
            Mail::to($user->email)->send(new UserStatus($user, $module));
            Session::flash('success', 'User and KYC has been approved');
        } else {
            Session::flash('error', 'Something Went Wrong');
        }
        return back();
    }
    
    
    
    public function subadminedit($member)
    {
        
        try {
            $member = Crypt::decrypt($member);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }
        $memberType = $this->getMemberType();
        $profile = User::find($member);
        $states = State::all();
        return view("members.subadminedit", compact("profile", "states", "memberType"));

        //   print_r(Crypt::decrypt( $member));
    }
    
        public function subadminupdate(User $users)
    {
        // echo "<pre>";
        // print_r($users); exit;
        $userId = $users->loginId;

            if ($users->update([
                "name" => request()->input("first_name"),
                "last_name" => request()->input("last_name"),
                "email" => request()->input("email"),
                "contact" => request()->input("contact"),
            ])) {

                Session::flash('success', 'User updated successfully');
            } else {
                Session::flash('error', 'Something went wrong !');
            }
   
        return back();

    }

    
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
    
    
    public function pendingUser(){
		User::where([
            "id" => Crypt::decrypt(request()->input("id")),
        ])->update(["kyc_status" => 0]);
        
        $module = Module::updateOrCreate(["user_id" => Crypt::decrypt(request()->input("id")), "module_slug" => "account"], ["module_sta" => 0, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        if ($module) {
            //$user = User::find($module->user_id);
            //Mail::to($user->email)->bcc("infodiosm.com@gmail.com")->send(new UserStatus($user, $module, request()->input("reject_reason")));
          
            Session::flash('success', 'Status change successfully.');
        } else {
            Session::flash('error', 'Something Went Wrong');

        }
        return back();
	}
    
    
    
    public function rejectUser()
    { /**UserRejectReasonModel */
	User::where([
            "id" => Crypt::decrypt(request()->input("id")),
        ])->update(["kyc_status" => 2]);
        UserRejectReason::create(["rejectReason" => request()->input("reject_reason"), "user_id" => Crypt::decrypt(request()->input("id")), "rejectedBy" => Auth::user()->name, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        $module = Module::updateOrCreate(["user_id" => Crypt::decrypt(request()->input("id")), "module_slug" => "account"], ["module_sta" => 0, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        if ($module) {
            //$user = User::find($module->user_id);
            //Mail::to($user->email)->bcc("infodiosm.com@gmail.com")->send(new UserStatus($user, $module, request()->input("reject_reason")));
          
            Session::flash('success', 'User has been rejected');
        } else {
            Session::flash('error', 'Something Went Wrong');

        }
        return back();

    }

      public function approveUser()
    {
       

        $module = Module::updateOrCreate(["user_id" => Crypt::decrypt(request()->input("id")), "module_slug" => "account"], ["module_sta" => 1, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        //**KYC approved */
        User::where([
            "id" => Crypt::decrypt(request()->input("id")),
        ])->update(["kyc_status" => 1]);

           //   updating in wallet for login user 
           $user_id=Crypt::decrypt(request()->input("id"));
           

           $user_details=\App\User::where('id',$user_id)->first();

        //    echo "<pre>";print_r($user_details);die;
           $owner_id=$user_details->owner_id;
           $package_type=$user_details->package_type;
           $order_id=$user_details->order_id;
           $loginId=$user_details->loginId;
           $child_approve_status=$user_details->child_approve_status; 
           
        //    if($order_id!=NULL)
        //    {
               if($child_approve_status!=1)
               {
                        $member_types_details=\App\memberType::select('id')->where('code',$package_type)->first();
                        $member_type_id=$member_types_details->id;
                        $registration_fees_details=\App\RegistrationFees::select('referral_amount')->where('member_type_id',$member_type_id)->first();
                        $referral_amount=$registration_fees_details->referral_amount;
                    
                        //inserting record in wallet for newly created user
                        $method="Reference Fees (".$loginId.")";
                        DB::table('wallets')->insert(
                            [
                                'user_id' => $owner_id, 
                                'method' => $method,
                                'created_at' => date("Y-m-d H:i:s"),
                                'updated_at' => date("Y-m-d H:i:s"),
                                'type' => 0,
                                'amount' => $referral_amount,
                                'transaction_id' => $loginId,
                                ]
                        );

                        \App\User::where('loginId', $loginId)
                                ->update(['child_approve_status' => 1]);
               }
               else{
                Session::flash('error', 'Already approved !!');
               }
             
        //    }
        //    else{
        //     Session::flash('error', 'No order id found.');
        //    }


        if ($module) {
            $user = User::find($module->user_id);
             Mail::to($user->email)->send(new UserStatus($user, $module));
            Session::flash('success', 'User and KYC has been approved');
        } else {
            Session::flash('error', 'Something Went Wrong');
        }
        return back();
    }


    public function getProfile()
    {

        // print_r(request()->input());
        $user = User::where(["id" => request()->input("id")])->first();
        $rejectReason = UserRejectReason::where(["user_id" => request()->input("id")])->get();

        return view("members.userProfile", compact("user", "rejectReason"));
    }
    public static function checkRights($user, $role)
    {
        $data = Module::where(["user_id" => $user, "module_slug" => $role])->first();

        if ($data != null) {
            return $data->module_sta;
        } else {
            return 0;
        }
    }
    public static function checkRightsAll($slug)
    {
        $data = Module::where(["module_slug" => $slug, "module_sta" => 1])->count();
        if($data > 0){
            return 1;
        }else{
            return 0;
        }
    }
    
    public function create(Request $request)
    {
        $showMemberLoginId = 1;
        $memberType = $this->getMemberType();
        $states = State::all();
        $profile = new User();
		$newUser = [];
		if(isset($request->createid) && $request->createid > 0){
			$newUser = UserRegistration::where(['id'=>$request->createid,'regis_status'=>'PENDING'])->first();
		}
        //  $city= City::all();
        return view('members.create', compact('memberType', 'states', 'profile', 'showMemberLoginId','newUser'));
    }
    public static function packageType($package)
    {
        switch ($package) {
            case 'SH':
                return "Stead Head";
                break;
            case 'MD':
                return "Master Distributor";
                break;
            case 'DT':
                return "Distributor";
                break;
            case 'RT':
                return "Retailer";
                break;
            default:
                return "Admin";
                break;
        }
    }
    public function getCity()
    {
        $city = City::where(["city_state" => request()->input('state')])->get();
        return response()->json(['city' => $city]);
    }

    public function store(User $user)
    { 
        // return request()->all();       
        $file_name = "";
        request()->validate([
            'email' => 'required|unique:users',
            // 'aadharFront' => 'image',
            // 'aadharBack' => 'image',
            // 'panCardImage' => 'image',
            'member_type' => 'required',
            'package_type' => 'required',
            'contact' => 'required|unique:users',
            'pancard' => 'required',
            'aadhar' => 'required',
            'address' => 'required',
            // 'account' => 'unique:users,account_no',
        ]);
        
        $userMasters = UserMaster::where('user_id', Auth::user()->id)->orderBy('id', 'DESC')->first();    
        if ($userMasters) 
        {
            $checkMemberType = request()->input('member_type');            
            if ($checkMemberType == 2)
            {
                $userCount = User::where('owner_id', Auth::user()->id)->count();                
                if($userMasters->master_d < $userCount)
                {
                    $message = "You can not create more then ".$userMasters->master_d." Master Distributor! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }                
                if ($userMasters->distributor < request()->input('distributor')) 
                {
                    $message = "You can not create more then ".$userMasters->distributor." Distributor! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }
                if ($userMasters->retailer < request()->input('retailer')) 
                {
                    $message = "You can not create more then ".$userMasters->retailer." Retailer! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }
            }

            if ($checkMemberType == 3)
            {
                $userCount = User::where('owner_id', Auth::user()->id)->count(); 
                if ($userMasters->distributor < $userCount) 
                {
                    $message = "You can not create more then ".$userMasters->distributor." Distributor! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }
                if ($userMasters->retailer < request()->input('retailer')) 
                {
                    $message = "You can not create more then ".$userMasters->retailer." Retailer! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }
            }

            if ($checkMemberType == 4)
            {
                $userCount = User::where('owner_id', Auth::user()->id)->count();                
                if ($userMasters->retailer < $userCount) 
                {
                    $message = "You can not create more then ".$userMasters->retailer." Retailer! You can contact your administrator";
                    Session::flash('error', $message);
                    return back();
                }
            }
        }
        
        // return 'hello';
        if (request()->hasFile('profile')) {
            $file = request()->file('profile');
            $file_size = round($file->getSize() / 1024);
            $file_ex = $file->getClientOriginalExtension();
            $file_mime = $file->getMimeType();
            $file_name = time() . $file->getClientOriginalName();
            $file->move('profilePic', $file_name);
        }

        $aadhar = "";
        $usersId = DB::table('users')->max('id') + 1;
        $userID = request()->input("package_type") . "" . rand(100, 999) . "" . $usersId;

        $path = "uploads";
		$six_digit_random_number = random_int(100000, 999999);
		$user->tpin =$six_digit_random_number;

        if (request()->hasFile('aadharFront')) {
            $filesFront = request()->file("aadharFront");
            $filesBack = request()->file("aadharBack");
            // $file_size = round($file->getSize() / 1024);
            $filesFrontName = time() . $filesFront->getClientOriginalName();
            $filesBackName = time() . $filesBack->getClientOriginalName();
            $filesFront->move("$path", $filesFrontName);
            $filesBack->move("$path", $filesBackName);
            $user->aadharFront = $filesFrontName;
            $user->aadharBack = $filesBackName;
        }

        if (request()->hasFile('panCardImage')) {
            $panCardImage = request()->file("panCardImage");
            // $file_size = round($file->getSize() / 1024);
            $panCardName = time() . $panCardImage->getClientOriginalName();
            $panCardImage->move("$path", $panCardName);
            $user->pancardImage = $panCardName;
        }       
        
        // $signature = request()->file("signature");
        // $signatureName = time() . $signature->getClientOriginalName();
        // $signature->move("$path", $signatureName);

        $user->member_type = request()->input("member_type");
        $user->package_type = request()->input("package_type");
        $rand = Str::random(8);
        $user->password = Hash::make($rand);
		$user->password_new =$rand;
        $user->profilePic = $file_name;
        //$user->signature = $signatureName;
        $user->name = request()->input("first_name");
        $user->owner_id = auth()->user()->id;
        $user->last_name = request()->input("last_name");
        $user->middle_name = request()->input("middle_name") ? request()->input("middle_name") : "";
        $user->account_no = request()->input("account");
        $user->ifsc_code = request()->input("ifsc");
        $user->aadhar = request()->input("aadhar");
        $user->shop_name = request()->input("shop_name");
        $user->shop_address = request()->input("shop_address");
        $user->gst_number = request()->input("gst_number");
        $user->bpancard = request()->input("bpancard");
        $user->pancard = request()->input("pancard");
        $user->address = request()->input("address");
        $user->country = request()->input("country");
        $user->state = request()->input("state");
        $user->city = request()->input("city");
        $user->post_code = request()->input("post_code");
        $user->email = request()->input("email");
        $user->contact = request()->input("contact");
        //$user->landStd = request()->input("landStd");
        //$user->landNumber = request()->input("landNumber");
        $user->loginId = $userID;  
        $user->show_login_id = $userID; 
        
		if (request()->has('account_no2')) {
			
			$user->account_no2 = request()->input("account_no2");
		}
		if (request()->has('ifsc_code2')) {
			$user->ifsc_code2 = request()->input("ifsc_code2");
		}
        if (request()->has('account_no3')) {
			$user->account_no3 = request()->input("account_no3");
		}
		if (request()->has('ifsc_code3')) {
			$user->ifsc_code3 = request()->input("ifsc_code3");
		}
		
        $user->save();       

        if ($user) {  
            $superD = request()->input("super_d");
            $masterD = request()->input("master_d");
            $distributor = request()->input("distributor");
            $retailer = request()->input("retailer");  
            if ($superD == null) {
                $superD = 0;
            }  
            if ($masterD == null) {
                $masterD = 0;
            }  
            if ($distributor == null) {
                $distributor = 0;
            }  
            if ($retailer == null) {
                $retailer = 0;
            }        
            UserMaster::create([
                "user_id" => $user->id,
                "parent_user_id" => Auth::user()->id,
                "member_type_id" => request()->input("member_type"),
                "super_d" => $superD,
                "master_d" => $masterD,
                "distributor" => $distributor,
                "retailer" => $retailer
            ]);
            $memberType = \App\RegistrationFees::whereHas('memberType', function ($q) {$q->where('code', '=', request()->input("package_type"));})->first();
            $fullName = $user->name.' '.$user->last_name;
            $number = $user->contact;
            $templateId = "1207164363559123713";   
            $senderId = env('SMSSenderIdTemp');                
            $message = "Dear ".$fullName." , Welcome to Diosm You have registered sucessfully, your ID- ".$user->email.", Password- ".$rand.", MPin- ".$six_digit_random_number." Now you can login on https://login.diosm.com/";
           // $this->sendSMS($number, $message, $templateId, $senderId); 
          
           // Mail::to($user->email)->bcc("diospays@gmail.com")->send(new Signup($user, $rand, $six_digit_random_number));
            Mail::to($user->email)->send(new Signup($user, $rand, $six_digit_random_number));
            Session::flash('success', 'New user added successfully');

        } else {
            Session::flash('error', 'Something went wrong !');
        }
        return back();
    }


    
    private function deductFromWallet($user, $amount, $method)
    {
        Wallet::insert(["user_id" => $user, "method" => $method, "type" => 1, "amount" => $amount, "transaction_id" => null, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
    }

	public function walletControl(){
		 if (request()->input("role") == "") {
			$user_id = request()->input("id");
			$set = request()->input("set");
			User::where(["id" => $user_id])->update(["wallet_lock"=>$set]);
			return response()->json(array("message"=>"Update"));
		 } else {
			 return abort(404);
		 }
	}


    public function setRules()
    {
        if (request()->input("role") == "") {
            if(request()->input("id") == 0){
                $getModule = Module::where('module_slug', request()->input("code"))->get();
                foreach($getModule as $key => $list){                    
                    $module = Module::updateOrCreate
                        (
                        ["id" => $list->id], ["module_sta" => request()->input("set"), "created_at" => date("Y-m-d"), "updated_at" => date("Y-m-d")]

                    );
                } 
            }else{

                $module = Module::updateOrCreate
                    (
                    ["user_id" => request()->input("id"), "module_slug" => request()->input("code")], 
                    ["module_sta" => request()->input("set"), "created_at" => date("Y-m-d"), "updated_at" => date("Y-m-d")]
    
                );
            }
            return response()->json($module);
        } else {
            return abort(404);

        }
    }
    private function getMemberType()
    {
        $code = User::find(Auth::user()->id)->package_type;        
        $id = memberType::where(['code' => $code])->get();        
        if (isset($id[0]->id)) {
            $code = $id[0]->id;
            $users = DB::select(DB::raw("SELECT GROUP_CONCAT(lv SEPARATOR ',') as child FROM ( SELECT @pv:=(SELECT GROUP_CONCAT(id SEPARATOR ',') FROM member_types WHERE FIND_IN_SET(parent, @pv)) AS lv FROM member_types JOIN (SELECT @pv:=:somevariable) tmp ) a"), array(
                'somevariable' => $code,
            )); 
            // dd($users);           
            if ($users[0]->child) {
                $usr = explode(",", $users[0]->child);
                $memberType = [];
                foreach ($usr as $key => $value) {
                    $data = memberType::find($value);
                    $memberType[] = (object) ["code" => $data->code, "id" => $data->id, "name" => $data->name];
                }       
            } else {
                $memberType[] = (object) ["code" => "RT", "id" => 4, "name" => "Retailer"];
            }
        } else {
            $memberType = memberType::all();
        }
        return $memberType;
    }
    public function edit($member)
    {
        $showMemberLoginId = 2;
        try {
            $member = Crypt::decrypt($member);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }        
        $memberType = $this->getMemberType();    
        // dd($memberType);    
        $profile = User::find($member); 
        // Get Time diffrence
        // $now = time(); // or your date as well
        // $your_date = strtotime($profile->created_at);
        // $datediff = $now - $your_date;
        // $dateDiffForEditAcc = round($datediff / (60 * 60 * 24));
        if ($profile->id == 1 && $profile->loginId == 'ADMIN') {
        	$memberTypeEnableDisable = 0;
        } else {
        	$memberTypeEnableDisable = 1;
        } 
        $states = State::all();
		$city = array();
		if(!empty($profile->state)){
			$city = City::where(["city_state" => $profile->state])->get();
		}
        return view("members.edit", compact("profile", "states", "memberType", "city", "memberTypeEnableDisable", "showMemberLoginId"));

        //   print_r(Crypt::decrypt( $member));
    }
    public function update(User $member)
    {
        // return request()->all();
        $file_name = '';
        
        if (request()->not_in_image != 1) {
            if (empty(request()->hasFile('aadharFront'))) {
                Session::flash('error', 'Something went wrong!, Please attach aadhar front image');
                return back();
            }
            if (empty(request()->hasFile('aadharBack'))) {
                Session::flash('error', 'Something went wrong!, Please attach aadhar back image');
                return back();
            }
            if (empty(request()->hasFile('panCardImage'))) {
                Session::flash('error', 'Something went wrong!, Please attach pancard image');
                return back();
            }
            if (empty(request()->hasFile('profile'))) {
                Session::flash('error', 'Something went wrong!, Please attach profile image');
                return back();
            }     
        }
           

        if (request()->hasFile('profile')) {
            $file = request()->file('profile');
            // $file_size = round($file->getSize() / 1024);
            // $file_ex = $file->getClientOriginalExtension();
            // $file_mime = $file->getMimeType();
            $file_name = time() . $file->getClientOriginalName();
            $file->move('profilePic', $file_name);
        }
        $userId = $member->loginId;

        $path = "uploads";

        $filesFrontName = $member->aadharFront;
        if (request()->hasFile('aadharFront')) {
            $filesFront = request()->file("aadharFront");
            $filesFrontName = time() . $filesFront->getClientOriginalName();
            $filesFront->move("$path", $filesFrontName);
        }
        $filesBackName = $member->aadharBack;
        if (request()->hasFile('aadharBack')) {
            $filesBack = request()->file("aadharBack");
            $filesBackName = time() . $filesBack->getClientOriginalName();
            $filesBack->move("$path", $filesBackName);
        }
        $panCardName = $member->panCardImage;
        if (request()->hasFile('panCardImage')) {
            $panCardImage = request()->file("panCardImage");
            $panCardName = time() . $panCardImage->getClientOriginalName();
            $panCardImage->move("$path", $panCardName);
        }
        $signatureName = $member->signature;
        if (request()->hasFile('signature')) {
            $signature = request()->file("signature");
            $signatureName = time() . $signature->getClientOriginalName();
            $signature->move("$path", $signatureName);
        }

        if ($file_name != '') {
            if ($member->update([
                "member_type" => request()->input("member_type"),
                "package_type" => request()->input("package_type"),
                "profilePic" => $file_name,
                "aadharFront" => $filesFrontName,
                "aadharBack" => $filesBackName,
                "pancardImage" => $panCardName,
                "signature" => $signatureName,
                "name" => request()->input("first_name"),
                "last_name" => request()->input("last_name"),
				"middle_name" => request()->input("middle_name"),
                "aadhar" => request()->input("aadhar"),
                "pancard" => request()->input("pancard"),
				"account_no" =>request()->input("account"),
				"ifsc_code" => request()->input("ifsc"),
                "shop_name" => request()->input("shop_name"),
                "shop_address" => request()->input("shop_address"),
                "gst_number" => request()->input("gst_number"),
                "bpancard" => request()->input("bpancard"),
                "address" => request()->input("address"),
                "country" => request()->input("country"),
                "state" => request()->input("state"),
                "city" => request()->input("city"),
                "post_code" => request()->input("post_code"),
                //"contact" => request()->input("contact"),
                //"landStd" => request()->input("landStd"),
                //"landNumber" => request()->input("landNumber"),
				"account_no2" => request()->input("account_no2"),
				"ifsc_code2" => request()->input("ifsc_code2"),
				"account_no3" => request()->input("account_no3"),
				"ifsc_code3" => request()->input("ifsc_code3"),
				"show_login_id" => request()->input("show_login_id"),
                "ekyc" => 0,
				
            ])) {

                Session::flash('success', 'User updated successfully');
            } else {
                Session::flash('error', 'Something went wrong !');
            }
        } else {
            if ($member->update([
                "member_type" => request()->input("member_type"),
                "package_type" => request()->input("package_type"),
                "name" => request()->input("first_name"),
                "last_name" => request()->input("last_name"),
				"middle_name" => request()->input("middle_name"),
                "aadharFront" => $filesFrontName,
                "aadharBack" => $filesBackName,
                "pancardImage" => $panCardName,
                "signature" => $signatureName,
                "aadhar" => request()->input("aadhar"),
                "pancard" => request()->input("pancard"),
				"account_no" =>request()->input("account"),
				"ifsc_code" => request()->input("ifsc"),
                "shop_name" => request()->input("shop_name"),
                "shop_address" => request()->input("shop_address"),
                "gst_number" => request()->input("gst_number"),
                "bpancard" => request()->input("bpancard"),
                "address" => request()->input("address"),
                "country" => request()->input("country"),
                "state" => request()->input("state"),
                "city" => request()->input("city"),
                "post_code" => request()->input("post_code"),
                "contact" => request()->input("contact"),
                "landStd" => request()->input("landStd"),
                "landNumber" => request()->input("landNumber"),
				"account_no2" => request()->input("account_no2"),
				"ifsc_code2" => request()->input("ifsc_code2"),
				"account_no3" => request()->input("account_no3"),
				"ifsc_code3" => request()->input("ifsc_code3"),
				"show_login_id" => request()->input("show_login_id"),
                "ekyc" => 0,
            ])) {
                Session::flash('success', 'User updated successfully');
            } else {
                Session::flash('error', 'Something went wrong !');
            }
        }
        return back();

    }

    public function downline()
    {
        $downline = User::where(["owner_id" => Auth::user()->id])->newQuery();
        if (request()->has('loginId') && request()->input('loginId') != '') {
            $loginId = request()->input('loginId');
            $downline->where('loginId', '=', "$loginId");
        }
        if (request()->has('name') && request()->input('name') != '') {
            $name = request()->input('name');
            $downline->where('name', 'Like', "%$name%");
        }
        if (request()->has('contact') && request()->input('contact') != '') {
            $contact = request()->input('contact');
            $downline->where('contact', '=', "$contact");
        }
        if (request()->has('aadhar') && request()->input('aadhar') != '') {
            $aadhar = request()->input('aadhar');
            $downline->where('aadhar', 'LIKE', "%$aadhar%");
        }
        $downline = $downline->paginate(10);
        return view("members.downline", compact("downline"));
    }

    public function member_details($member_id)
    {
        try {
            $member_id = Crypt::decrypt($member_id);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }
        $members = User::where('owner_id',$member_id)->orderBy("created_at", "desc")->paginate(10);
           
        return view("members.index", compact("members"));

    }

    public function member_details_downline($member_id)
    {
        try {
            $member_id = Crypt::decrypt($member_id);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }
        $downline = User::where('owner_id',$member_id)->orderBy("created_at", "desc")->paginate(10);
           
        return view("members.downline", compact("downline"));

    }

        public function approve_apes_kyc($member)
    {
        try {
            $member = Crypt::decrypt($member);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }

        User::where([
            "id" => $member,
        ])->update(["apes_kyc_status" => 1]);

        Session::flash('success', 'User APES KYC updated successfully');
        return back();
    }

    public function getMemberId()
    {        
    	$availMemberId = UserMaster::where('member_type_id', Auth()->user()->member_type)->where('user_id', Auth()->user()->id)->orderBy('id', 'DESC')->first();         
        $memberIdDetails = MemberIdPlan::where('parent_member_type_id', Auth()->user()->member_type)->get();        
        return view("members.getMemberId", compact("memberIdDetails","availMemberId"));
    }

    public function payMemberId($userId=null, $memberPlanId=null)
    { 
        // Wallet details of auth user 
        $walletSumCreditAmount = Wallet::where('user_id', $userId)->where('type', 0)->sum('amount'); 
        $walletSumDebitAmount = Wallet::where('user_id', $userId)->where('type', 1)->sum('amount');  
        $totalAmount = $walletSumCreditAmount-$walletSumDebitAmount;
        $walletBalance = number_format($totalAmount, 2,'.','');

        if ($walletBalance <= 0) {
            Session::flash('error', "Your Wallet Balance Is Low, Kindly Recharge Your Wallet (आपका वॉलेट बैलेंस कम है, कृपया अपने वॉलेट को रिचार्ज करें)");
            return back();
        }  

        $memberIdDetail = MemberIdPlan::find($memberPlanId);  
        if ($walletBalance < $memberIdDetail->amount) {
            Session::flash('error', "Your Wallet Balance Is Low, Kindly Recharge Your Wallet (आपका वॉलेट बैलेंस कम है, कृपया अपने वॉलेट को रिचार्ज करें)");
            return back();
        } 

        $userMaster = UserMaster::where('user_id', Auth()->user()->id)->where('member_type_id', Auth()->user()->member_type)->first();
        $userMasterDetail = new UserMaster;
        if($memberIdDetail->child_member_type_id == 2)
        {
        	$getMemberId = $userMaster->master_d;
        	$addMemberId = $userMaster->master_d + $memberIdDetail->no_of_ids;
            // Insert data in user master
            $userMasterDetail->user_id = Auth()->user()->id;
            $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
            $userMasterDetail->member_type_id = Auth()->user()->member_type;
            $userMasterDetail->super_d = $userMaster->super_d;
        	$userMasterDetail->master_d = $addMemberId; 
            $userMasterDetail->distributor = $userMaster->distributor;
            $userMasterDetail->retailer = $userMaster->retailer;                 	
        }
        if($memberIdDetail->child_member_type_id == 3)
        {
        	$getMemberId = $userMaster->distributor;
        	$addMemberId = $userMaster->distributor + $memberIdDetail->no_of_ids;
            // Insert data in user master
            $userMasterDetail->user_id = Auth()->user()->id;
            $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
            $userMasterDetail->member_type_id = Auth()->user()->member_type;
            $userMasterDetail->super_d = $userMaster->super_d;
            $userMasterDetail->master_d = $userMaster->master_d;
            $userMasterDetail->distributor = $addMemberId; 
            $userMasterDetail->retailer = $userMaster->retailer;        	
        }
        if($memberIdDetail->child_member_type_id == 4)
        {
        	$getMemberId = $userMaster->retailer;
        	$addMemberId = $userMaster->retailer + $memberIdDetail->no_of_ids;
            // Insert data in user master
            $userMasterDetail->user_id = Auth()->user()->id;
            $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
            $userMasterDetail->member_type_id = Auth()->user()->member_type;
            $userMasterDetail->super_d = $userMaster->super_d;
            $userMasterDetail->master_d = $userMaster->master_d;
            $userMasterDetail->distributor = $userMaster->distributor;
            $userMasterDetail->retailer = $addMemberId;         	
        }
        if($userMasterDetail->save()){
        	Wallet::create(["user_id" => Auth::user()->id, "method" => "Update Member Id", "type" => 1, "amount" => $memberIdDetail->amount, "transaction_id" => null, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
        	Session::flash('success', "Member Id Update Successfully");
        	return back();
        }else {
        	Session::flash('error', "Something went wrong! Member Id Not Updated");
        	return back();
        }
        
    }

    public function freeMemberId()
    {
        $users = User::whereNotNull('member_type')->where('member_type', '!=', 4)->get();
        // return $users;
        return view("members.freeMemberId", compact("users"));
    }

    public function payFreeMemberId()
    {
        $userId = request()->input('member_id');
        $meberType = request()->input('member_type');
        $type = request()->input('cr_dr');
        $noOfIds = request()->input('no_of_id');
        // return $userId;
        $userMaster = UserMaster::where('user_id', $userId)->orderBy('id', 'DESC')->first();       
        $userMasterDetail = new UserMaster;
        if ($type == 'credit') {
            if($meberType == 2)
            {
                $getMemberId = $userMaster->master_d;
                $addMemberId = $userMaster->master_d + $noOfIds;
                // Insert data in user master
                $userMasterDetail->user_id = $userId;
                $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                $userMasterDetail->member_type_id = $userMaster->member_type_id;
                $userMasterDetail->super_d = $userMaster->super_d;
                $userMasterDetail->master_d = $addMemberId; 
                $userMasterDetail->distributor = $userMaster->distributor;
                $userMasterDetail->retailer = $userMaster->retailer;                    
            }
            if($meberType == 3)
            {
                $getMemberId = $userMaster->distributor;
                $addMemberId = $userMaster->distributor + $noOfIds;
                // Insert data in user master
                $userMasterDetail->user_id = $userId;
                $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                $userMasterDetail->member_type_id = $userMaster->member_type_id;
                $userMasterDetail->super_d = $userMaster->super_d;
                $userMasterDetail->master_d = $userMaster->master_d;
                $userMasterDetail->distributor = $addMemberId; 
                $userMasterDetail->retailer = $userMaster->retailer;            
            }
            if($meberType == 4)
            {
                $getMemberId = $userMaster->retailer;
                $addMemberId = $userMaster->retailer + $noOfIds;
                // Insert data in user master
                $userMasterDetail->user_id = $userId;
                $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                $userMasterDetail->member_type_id = $userMaster->member_type_id;
                $userMasterDetail->super_d = $userMaster->super_d;
                $userMasterDetail->master_d = $userMaster->master_d;
                $userMasterDetail->distributor = $userMaster->distributor;
                $userMasterDetail->retailer = $addMemberId;             
            }
            $userMasterDetail->by_type = 1;    
            if($userMasterDetail->save()){            
                Session::flash('success', "Member Id Update Successfully");
                return back();
            }else {
                Session::flash('error', "Something went wrong! Member Id Not Updated");
                return back();
            }
        }

        if ($type == 'debit') {
            if($meberType == 2)
            {
                if ($userMaster->master_d > 0) {
                    $getMemberId = $userMaster->master_d;
                    $addMemberId = $userMaster->master_d - $noOfIds;
                    // Insert data in user master
                    $userMasterDetail->user_id = $userId;
                    $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                    $userMasterDetail->member_type_id = $userMaster->member_type_id;
                    $userMasterDetail->super_d = $userMaster->super_d;
                    $userMasterDetail->master_d = $addMemberId; 
                    $userMasterDetail->distributor = $userMaster->distributor;
                    $userMasterDetail->retailer = $userMaster->retailer;   
                }else{
                    Session::flash('error', "Something went wrong! You can not debit member id");
                    return back();
                }                 
            }
            if($meberType == 3)
            {
                if ($userMaster->distributor > 0) {
                    $getMemberId = $userMaster->distributor;
                    $addMemberId = $userMaster->distributor - $noOfIds;
                    // Insert data in user master
                    $userMasterDetail->user_id = $userId;
                    $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                    $userMasterDetail->member_type_id = $userMaster->member_type_id;
                    $userMasterDetail->super_d = $userMaster->super_d;
                    $userMasterDetail->master_d = $userMaster->master_d;
                    $userMasterDetail->distributor = $addMemberId; 
                    $userMasterDetail->retailer = $userMaster->retailer;     
                }else{
                    Session::flash('error', "Something went wrong! You can not debit member id");
                    return back();
                }      
            }
            if($meberType == 4)
            {
                if ($userMaster->retailer > 0) {
                    $getMemberId = $userMaster->retailer;
                    $addMemberId = $userMaster->retailer - $noOfIds;
                    // Insert data in user master
                    $userMasterDetail->user_id = $userId;
                    $userMasterDetail->parent_user_id = $userMaster->parent_user_id;
                    $userMasterDetail->member_type_id = $userMaster->member_type_id;
                    $userMasterDetail->super_d = $userMaster->super_d;
                    $userMasterDetail->master_d = $userMaster->master_d;
                    $userMasterDetail->distributor = $userMaster->distributor;
                    $userMasterDetail->retailer = $addMemberId;  
                }else{
                    Session::flash('error', "Something went wrong! You can not debit member id");
                    return back();
                }          
            }
            $userMasterDetail->by_type = 1;  
            if($userMasterDetail->save()){            
                Session::flash('success', "Member Id Update Successfully");
                return back();
            }else {
                Session::flash('error', "Something went wrong! Member Id Not Updated");
                return back();
            }
        }
        
    }

    public function getMemberForMemberId($id)
    {
        $data = User::where("id", $id)->pluck("name","member_type");
        return response()->json($data);
    }

    public function getMemberUserMaster($id, $type)
    {        
        if($type == 2) {
            $userCount = User::where(['owner_id' => $id, 'member_type' => $type])->count(); 
            $userData = UserMaster::where("user_id", $id)->orderBy('id', 'DESC')->first(['master_d']);
            $data = $userData->master_d - $userCount;
        }
        if($type == 3) {
            $userCount = User::where(['owner_id' => $id, 'member_type' => $type])->count(); 
            $userData = UserMaster::where("user_id", $id)->orderBy('id', 'DESC')->first(['distributor']);
            $data = $userData->distributor - $userCount;
        }
        if($type == 4) {
            $userCount = User::where(['owner_id' => $id, 'member_type' => $type])->count(); 
            $userData = UserMaster::where("user_id", $id)->orderBy('id', 'DESC')->first(['retailer']);
            $data = $userData->retailer - $userCount;
        }        
        return response()->json($data);
    }

    public function memberIdReport()
    {
        $loginId =  Auth::user()->loginId; 
        $users = User::whereNotNull('member_type')->where('member_type', '!=', 4)->get();
        $memberIdDetails = array();   
        if ($loginId == 'ADMIN') {
            $date = date("Y-m-d");
            if (request()->has('userId') && request()->input('userId') != '') {
                $userId = request()->input('userId');
                $memberIdDetails = UserMaster::with('user')->where('user_id', $userId)->orderBy('id', 'DESC')->get(); 
            }else{
               $memberIdDetails = UserMaster::with('user')->whereDate("created_at", "=", $date)->orderBy('id', 'DESC')->get();  
            }            
        }
        // return $memberIdDetails;
        return view("members.memberIdReport", compact("memberIdDetails","users"));
    }

    public function memberIdExport()
    {
        $loginId = Auth::user()->loginId; 
        $userId = request()->input('userId');  
        $users = User::whereNotNull('member_type')->where('member_type', '!=', 4)->get();
        $memberIdDetails = array();   
        if ($loginId == 'ADMIN') {
            $date = date("Y-m-d");
            if (request()->has('userId') && request()->input('userId') != '') {
                $userId = request()->input('userId');
                $memberIdDetails = UserMaster::with('user')->where('user_id', $userId)->orderBy('id', 'DESC')->get(); 
            }else{
               $memberIdDetails = UserMaster::with('user')->whereDate("created_at", "=", $date)->orderBy('id', 'DESC')->get();  
            }              
        } 

        $datatbl = '';
        $datatbl .= '<table collspacing="2" collpadding="5" style="border:2px;text-align:center;" border="1" width="100%">';
        $datatbl .= '<tr>  
            <th style="text-align:center;">SN</th>
            <th style="text-align:center;">User Id</th>
            <th style="text-align:center;">LoginId</th>
            <th style="text-align:center;">Member Name</th>
            <th style="text-align:center;">Super Distributor</th>
            <th style="text-align:center;">Master Distributor</th>
            <th style="text-align:center;">Distributor</th>
            <th style="text-align:center;">Retailer</th>
            <th style="text-align:center;">By Type</th>
            <th style="text-align:center;">Date & Time</th>                         
            </tr>';        
        // return $getFackData;
        //var_dump($getRegisterByData);
        foreach ($memberIdDetails as $key => $value) { 
        if ($value->by_type == 1) {
            $byType = 'ADMIN';
        }else{
            $byType = 'SELF';
        } 
        $count = 1; 
        $datatbl .=         
            '<tr>
                <td style="text-align:center;">'.$count.'</td>
                <td style="text-align:center;">'.$value->user_id.'</td>
                <td style="text-align:center;">'.$value->user->loginId.'</td>
                <td style="text-align:center;">'.$value->user->name.'</td>
                <td style="text-align:center;">'.$value->super_d.'</td>
                <td style="text-align:center;">'.$value->master_d.'</td>
                <td style="text-align:center;">'.$value->distributor.'</td> 
                <td style="text-align:center;">'.$value->retailer.'</td>
                <td style="text-align:center;">'.$byType.'</td>                              
                <td style="text-align:center;">'.$value->created_at->format("d, M Y, H:i:s").'</td>
            </tr>';
        $count++;
        } 
        $datatbl .= '</table>';    
            header("Content-Type: application/force-download");     
            header("Content-disposition: attachment; filename=MemberIdData.xls");
            header("Pragma: ");  
            header("Cache-Control: ");
            echo $datatbl;
            die;
    }

    public function ekyc(){          
        $memberType = $this->getMemberType();    
        // dd($memberType);    
        $profile = User::find(Auth()->user()->id);
        $states = State::all();
        $city = array();
        if(!empty($profile->state)){
            $city = City::where(["city_state" => $profile->state])->get();
        }
        return view("members.ekycUpdate", compact("profile", "states", "memberType","city"));   
    }   

    public function ekycApproved(Request $request)
    {
        $user = User::with('parent')->newQuery();
        if (request()->has('loginId') && request()->input('loginId') != '') {
            $loginId = request()->input('loginId');
            $user->where('loginId', '=', "$loginId");
        }
        if (request()->has('name') && request()->input('name') != '') {
            $name = request()->input('name');
            $user->where('name', 'Like', "%$name%");
        }
        if (request()->has('contact') && request()->input('contact') != '') {
            $contact = request()->input('contact');
            $user->where('contact', '=', "$contact");
        }
        if (request()->has('from_date') && request()->input('from_date') != '') {
            $from_date = Carbon::parse(request()->input('from_date'))->format("Y-m-d H:i:s");
            $user->where("updated_at", ">=", $from_date);
        }
        if (request()->has('to_date') && request()->input('to_date') != '') {
            $to_date = Carbon::parse(request()->input('to_date'))->format("Y-m-d 23:59:59");
            $user->where("updated_at", "<=", $to_date);
        }   
        if (request()->has('status') && request()->input('status') != '' && request()->input('name') == '' && request()->input('contact') == '' && request()->input('loginId') == '') {
            $user->where("kyc_status", "=", request()->input('status'));
        }

        if ((!request()->has('loginId')) && (!request()->has('name')) && (!request()->has('contact')) && (!request()->has('status')) && (!request()->has('from_date')) && (!request()->has('to_date'))) {
            /* $date = date("Y-m-d");                
            $user->whereDate("updated_at", "=", $date); */ 			
        }

        $members = $user->orderBy("updated_at", "desc")->paginate(10)->appends(["name"=>request()->name,"status"=>request()->status,"loginId"=>request()->loginId,"contact"=>request()->contact]);     
        //$members = $user->orderBy("created_at", "desc")->paginate(10);     
        // return $members;      
        return view("members.ekycMemberList", compact("members"));
    } 
	
    public function newUserRequest(Request $request)
    {
        $user = UserRegistration::where('regis_status','=','PENDING')->newQuery();
		if (request()->has('email') && request()->input('email') != '') {
            $email = request()->input('email');
            $user->where('email', '=', "$email");
        }
		if (request()->has('contact') && request()->input('contact') != '') {
            $contact = request()->input('contact');
            $user->where('mobile', '=', "$contact");
        }
        if (request()->has('name') && request()->input('name') != '') {
            $email = request()->input('name');
            $user->where('name', 'Like', "%$name%");
        }
        $members = $user->orderBy("updated_at", "desc")->paginate(10);     
      
        return view("members.newMemberRequest", compact("members"));
    } 
	
	public function newUserRequest_updateStatus(Request $request)
    {
		//return ["regis_status" => $request->status];
        try {
            $member = Crypt::decrypt($request->id);
        } catch (Exception $e) {
            Session::flash("error", "Invalid User");
            return back();
        }

        UserRegistration::where([
            "id" => $member,
        ])->update(["regis_status" => $request->status]);
		if($request->status=='REJECTED'){
			$user = UserRegistration::where('regis_status','=',$request->status)->first();
			UserRegistration::where([
				"id" => $member,
			])->update(["mobile" => "UPDATED_".$user->mobile, "email" => "UPDATED_".$user->email]);
		}

        Session::flash('success', 'Status updated successfully');
        return back();
    }

	public function pincode_verify(Request $request){
		/* $this->validate($request, [
			'pin_code' => 'required|max:6|min:6'
        ]); */
		$res = Http::withHeaders([
            "Accept" => "application/json",
            "Content-Type" => "application/json",
        ])->timeout(30)->get("https://api.postalpincode.in/pincode/".$request->pin_code, []);
        
        if ($res->ok()) {
            $response = $res->json();
			if(isset($response[0]['PostOffice'][0])){
				$return['state'] = $response[0]['PostOffice'][0]['State'];
				$return['city'] = $response[0]['PostOffice'][0]['District'];
				$return['status'] = 'valid';
			} else {
				$return['status'] = 'invalid';
			}
			return $return;
		}
	}
	    
    public function registerForm()
    {
        $memberType = memberType::all();

        //  $city= City::all();
        return view('members.registration', compact('memberType'));
    }
	public function registerProcess(Request $request)
    {
		//return $request;
		/* $validator = \Validator::make($request->all(), [			
			'type' => 'required',
			'name' => 'required',
			'number' => 'required',
			'email' => 'required|email',
			'pan' => 'required',
			'aadhar' => 'required|max:12|min:12',
		]);
		if ($validator->fails()) {			
			return redirect()->back()->withErrors($validator->errors())->withInput();
		} */
		$this->validate($request, [
			'type' => 'required',
			'name' => 'required',
			'mobile' => 'required|unique:user_registration',
			'email' => 'required|email|unique:user_registration',
			'pan' => 'required',
			'address' => 'required',
			'aadhar' => 'required|max:14|min:12',
			'pin_code' => 'required|max:6|min:6'

        ]);

		$userCheck = User::where('email',$request->email)->first();
		//return $userCheck;
		if(isset($userCheck['email']) && $userCheck['email'] == $request->email ){
			$validator = \Validator::make($request->all(), []);
			$validator->messages()->add('email', 'Email id already in used!');
			return redirect()->back()->withErrors($validator->errors())->withInput(); 
		}
		//return $request;
		$memberType = memberType::where('id',$request->type)->first();
		if(isset($memberType) && !empty($memberType)){
			$charge = $memberType->registration_charge;
			$code = $memberType->code;
			$typeId = $memberType->id;
			
			$payment_id = $code.time().rand(000,999);
			
			$name = $request->name;
			$email = $request->email;
			$mobile = $request->mobile;
			$pan = $request->pan;
			$aadhar = str_replace("-","",$request->aadhar);
			$pin_code = $request->pin_code;
			$address = $request->address;
			$city = $request->city;
			$state = $request->state;
			$middle_name = !empty($request->middle_name) ? " ".$request->middle_name : ''  ;
			$last_name = !empty($request->last_name) ? " ".$request->last_name : ''  ;
			
			$userRegistration = new UserRegistration;
			
			$userRegistration->name = $name . $middle_name . $last_name ;
			$userRegistration->email = $email ;
			$userRegistration->mobile = $mobile ;
			$userRegistration->pan = $pan ;
			$userRegistration->aadhar = $aadhar ;
			$userRegistration->address = $address ;
			$userRegistration->pin_code = $pin_code ;
			$userRegistration->state = $state ;
			$userRegistration->city = $city ;
			$userRegistration->user_type = $typeId ;
			$userRegistration->user_code = $code ;
			$userRegistration->payment_id = $payment_id ;
			$userRegistration->payment_status = 'PENDING' ;
			$userRegistration->created_at = date("Y-m-d H:i:s") ;
			$userRegistration->updated_at = date("Y-m-d H:i:s") ;
			$userRegistration->save();
			/* if($userRegistration->save()){
				
				
				$checkSum = "";
				$paramList = array();
				
				$INDUSTRY_TYPE_ID = env('INDUSTRY_TYPE_ID');
				$CHANNEL_ID = env('CHANNEL_ID');
				$PAYTM_MERCHANT_MID = env('PAYTM_MERCHANT_MID');
				$PAYTM_MERCHANT_KEY = env('PAYTM_MERCHANT_KEY');
				$PAYTM_MERCHANT_WEBSITE = env('PAYTM_MERCHANT_WEBSITE');
				
				$ORDER_ID = $payment_id ;
				$CUST_ID = $code.'_'.$mobile;
				$TXN_AMOUNT = $charge;

				// Create an array having all required parameters for creating checksum.
				$paramList["MID"] = $PAYTM_MERCHANT_MID;
				$paramList["ORDER_ID"] = $ORDER_ID;
				$paramList["CUST_ID"] = $CUST_ID;
				$paramList["INDUSTRY_TYPE_ID"] = $INDUSTRY_TYPE_ID;
				$paramList["CHANNEL_ID"] = $CHANNEL_ID;
				$paramList["TXN_AMOUNT"] = $TXN_AMOUNT;
				$paramList["WEBSITE"] = $PAYTM_MERCHANT_WEBSITE;

				
				$paramList["CALLBACK_URL"] = route('members.pgverify');
				$paramList["MSISDN"] = $mobile; //Mobile number of customer
				$paramList["EMAIL"] = $email; //Email ID of customer
				$paramList["MERC_UNQ_REF"] = $CUST_ID;

				//Here checksum string will return by getChecksumFromArray() function.
				$PaytmPG = new PaytmPG();
				$checkSum = $PaytmPG->getChecksumFromArray($paramList,$PAYTM_MERCHANT_KEY);
				//return compact('paramList','checkSum');
				return view('members.paytmRedirect',compact('paramList','checkSum'));
				
			} */
			
			Session::flash('message', "Registration request is accepted. Our team will contact you shortly.");
			//return $userRegistration;
			return back();
		}
		Session::flash('error', "Something went wrong! We can not accept request.");
        return back();
	}
	
	public function payment_verify(Request $request){
				
		$paytmChecksum = "";
		$paramList = array();
		$isValidChecksum = "FALSE";
		
		$INDUSTRY_TYPE_ID = env('INDUSTRY_TYPE_ID');
		$CHANNEL_ID = env('CHANNEL_ID');
		$PAYTM_MERCHANT_MID = env('PAYTM_MERCHANT_MID');
		$PAYTM_MERCHANT_KEY = env('PAYTM_MERCHANT_KEY');
		$PAYTM_MERCHANT_WEBSITE = env('PAYTM_MERCHANT_WEBSITE');

		$paramList = $request->all();
		$paytmChecksum = isset($paramList["CHECKSUMHASH"]) ? $paramList["CHECKSUMHASH"] : ""; //Sent by Paytm pg

		$PaytmPG = new PaytmPG();
		$isValidChecksum = $PaytmPG->verifychecksum_e($paramList, $PAYTM_MERCHANT_KEY, $paytmChecksum); //will return TRUE or FALSE string.
		
		if($isValidChecksum == "TRUE") {
			//$url = 'https://securegw-stage.paytm.in/merchant-status/getTxnStatus';
			$url = 'https://securegw.paytm.in/merchant-status/getTxnStatus';
			$txnDetails =  $PaytmPG->getTxnStatus($url,$paramList);
			
			$userRegistration = new UserRegistration;
			
			if(isset($txnDetails['STATUS']) && $txnDetails['STATUS'] == 'TXN_SUCCESS'){

				$updateData = array(
					'payment_status' => 'SUCCESS',
					'payment_response' => json_encode($txnDetails),
					'updated_at' => date("Y-m-d H:i:s"),
				);
				$userRegistration->where('payment_id',$txnDetails['ORDERID'])->where('payment_status','PENDING')->update($updateData);
				$userRegDetail = $userRegistration->where('payment_id',$txnDetails['ORDERID'])->where('payment_status','SUCCESS')->where('regis_status','PENDING')->first();
				
				if(isset($userRegDetail['id'])){
					$name = $userRegDetail['name'];
					$email = $userRegDetail['email'];
					$mobile = $userRegDetail['mobile'];
					$aadhar = $userRegDetail['aadhar'];
					$address = $userRegDetail['address'];
					$pan = $userRegDetail['pan'];
					$type = $userRegDetail['user_type'];
					$user_code = $userRegDetail['user_code'];
				
					$usersId = DB::table('users')->max('id') + 1;
					$userID = $user_code . "" . rand(100, 999) . "" . $usersId;
					
					$user = new User();
					
					$six_digit_random_number = random_int(100000, 999999);
					$user->tpin =$six_digit_random_number;
					
					$rand = Str::random(8);
					$user->password = Hash::make($rand);
					$user->password_new =$rand;

					$user->member_type = $type;
					$user->package_type = $user_code;
					$user->name = $name;
					$user->email = $email;
					$user->contact = $mobile;
					$user->owner_id = 1;
					$user->aadhar = $aadhar;
					$user->shop_name = '';
					$user->shop_address = '';
					$user->pancard = $pan;
					$user->address = $address;
					$user->loginId = $userID;    
					if($user->save()){    
						
						UserMaster::create([
								"user_id" => $user->id,
								"parent_user_id" => 1,
								"member_type_id" => $type,
								"super_d" => 0,
								"master_d" => 0,
								"distributor" => 0,
								"retailer" => 0
							]);
						$userRegistration->where('payment_id',$txnDetails['ORDERID'])->where('payment_status','SUCCESS')->where('regis_status','PENDING')->update(array('regis_status'=>'SUCCESS'));
						Mail::to($email)->send(new Signup($user, $rand,$six_digit_random_number));
						return view('members.thankyou');
					}
					
				}
				
				 
				 
			} else if(isset($txnDetails['STATUS']) && $txnDetails['STATUS'] == 'TXN_FAILURE') {
				$updateData = array(
					'payment_status' => 'FAILED',
					'payment_response' => json_encode($txnDetails),
					'updated_at' => date("Y-m-d H:i:s"),
				);
				$userRegistration->where('payment_id',$txnDetails['ORDERID'])->where('payment_status','PENDING')->update($updateData);
				return "<script> alert('Status: ".$txnDetails["STATUS"] . ", Reason: " . $txnDetails["RESPMSG"]."'); window.location = 'https://login.diosm.com/'; </script>";
			}
			//return view('members.thankyou');
			return "Something wrong!";
			
		} else {
			return "Invalid Callback";
		}
	
	}


}
