Current File : /home/tradevaly/www/app/Http/Controllers/User/UserController.php
<?php

namespace App\Http\Controllers\User;

use App\Http\Controllers\Controller;
use App\Models\AdvertiserOrder;
use App\Models\Award;
use App\Models\BuyOffer;
use App\Models\Category;
use App\Models\Certificate;
use App\Models\Company;
use App\Models\Country;
use App\Models\FeaturedProduct;
use App\Models\FeaturedRequest;
use App\Models\AdminNotification;
use App\Models\Income;
use App\Models\InquiryMessage;
use App\Models\Message;
use App\Models\Messsage;
use App\Models\Method;
use App\Models\Package;
use App\Models\Pdf;
use App\Models\Product;
use App\Models\QuoteMessage;
use App\Models\Subscriber;
use App\Models\Tag;
use App\Models\Transaction;
use App\Models\Thread;
use App\Models\Thumb;
use App\Models\MessageList;
use App\Models\User;
use Brian2694\Toastr\Facades\Toastr;
use Carbon\Carbon;
use DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\Facades\Image;
use shurjopayv2\ShurjopayLaravelPackage8\Http\Controllers\ShurjopayController;


class UserController extends Controller
{
    public function feature_product_create(Request $request)
    {
        $product = Product::where('status', 1)->findorFail($request->product_id);
        if ($request->isMethod("post")) {
            $featured = new FeaturedRequest();
            $featured->product_id = $product->id;
            $featured->user_id = Auth::user()->id;
            if ($featured->save()) {
                return redirect()->route('user.featuredlist');
            }
        }

        return view('user.pages.submitfeatured', compact('product'));
    }

    public function dashboard()
    {
        //   $percent = $columns = Schema::getColumnListing('users');
        $columns = Schema::getColumnListing('users');
        $emptyClm = 0;
        $company_id = Company::where('user_id', Auth::id())->first()->id;
        foreach ($columns as $column) {
            $count = User::whereNull($column)->where('id', Auth::id())->first();
            if ($count) {
                $emptyClm++;
            }
        }
        $percentage = ($emptyClm / count($columns)) * 100;

        // company profile complete count
        $columns_c = Schema::getColumnListing('companies');
        $emptyClm_c = 0;

        foreach ($columns_c as $column_c) {
            $count_c = Company::whereNull($column_c)->where('id', $company_id)->first();
            if ($count_c) {
                $emptyClm_c++;
            }
        }
        $percentage_c = ($emptyClm_c / count($columns_c)) * 100;


        //   $data['auth_total_product'] = Product::where('supplier_id',Auth::id())->take(10)->count();
        $data['auth_total_product'] = Product::where('supplier_id', Auth::id())->take(10)->count();
        $data['auth_buy_offer'] = BuyOffer::where('buyer_id', Auth::id())->take(10)->count();
        $data['user_profile_complete'] = number_format($percentage);
        $data['user_profile_complete_c'] = number_format($percentage_c);
        $data['messages'] = Message::where('status', 0)->where(function ($query) {
            $query->where('sender_id', Auth::user()->id)
                ->orWhere('receiver_id', Auth::user()->id);
        })->count();

        $data['products'] = Product::where('supplier_id', Auth::user()->id)->count();
        $data['product_list'] = Product::where('supplier_id', Auth::user()->id)->latest()->get()->take(6);

        $data['buyoffer'] = BuyOffer::where('buyer_id', Auth::user()->id)->count();
        return view('user.pages.index')->with($data);
    }

    public function subs()
    {
        $package = Package::find(Auth::user()->package_id);
        return view('user.pages.subs', compact("package"));
    }

    public function changeplan()
    {
        $packages = Package::where('status', 1)->get();
        return view('user.pages.changeplan', compact("packages"));
    }

    public function choose($id, Request $request)
    {
        $package = Package::findOrFail($id);
        $subscriber = Subscriber::where('user_id',Auth::id())->first();
        
        dd($package, $subscriber,Auth::id() );
        $subscriber->user_id  = Auth::guard('web')->user()->id;
        $subscriber->order_id = rand(000000,666666);
        $subscriber->package_id = $package->id;

        $subscriber->date = date('Y-m-d');
        $subscriber->amount = $package->price;
        $subscriber->payment_status = 'unpaid';
        $subscriber->status = 'pending';

        if ($subscriber->save()) {
            $invoice = Subscriber::find($subscriber->id);
            $user = Auth::guard('web')->user();
            $info = array(
                'currency' => 'BDT',
                'order_for' => 'changornewsubscription',
                'amount' => intval($invoice->amount),
                'order_id' => $invoice->order_id,
                'discsount_amount' => 0,
                'disc_percent' => 0,
                'client_ip' => 'N\L',
                'customer_name' => $user->name,
                'customer_phone' => $user->phone ? $user->phone : Auth::user()->company->phone,
                'email' => $user->email,
                'customer_address' => "N\L",
                'customer_city' => "N/L",
                'customer_state' => "N/L",
                'customer_postcode' => "N/L",
                'customer_country' => Country::find($user->country_id)->name
            );
            // $order = [
            //     'order_id' => $invoice->order_id,
            //     'order_for' => 'subscription',
            //     'package_id' => $package->id,
            // ];
            session(['orderInfo' => $info]);
            $shurjopay_service = new ShurjopayController();
            return $shurjopay_service->checkout($info);
        }
    }

    public function subscriptionInvoice()
    {
        $invoice = Subscriber::where('user_id',Auth::user()->id)->first();
        return view('user.pages.invoice.invoice', compact('invoice'));
    }
    public function subscriptionMoneyReceipt()
    {
        $money_receipt = Subscriber::where('user_id',Auth::user()->id)->first();
        return view('user.pages.invoice.money_receipt', compact('money_receipt'));
    }

    public function renew(Request $request)
    {
        $package = Package::find(Auth::user()->package_id);
        $income = new Income();
        
        
        $income->user_id = Auth::guard('web')->user()->id;
        $income->package_id = $package->id;
        $income->date = date('Y-m-d');
        $income->amount = $package->price;
        $order_id = $package->price.rand(99999,9999);
        $income->order_id = $order_id;
        
        
        if ($income->save()) {
           $info = array(
                'currency' => 'bdt',
                'order_for' => 'renew_subscription',
                'amount' => $package->price,
                'order_id' => $order_id, 
                'discsount_amount' => 0,
                'disc_percent' => 0,
                'client_ip' => "N/L",
                'customer_name' => Auth::user()->name,
                'customer_phone' => ((Auth::user()->company->phone)? Auth::user()->company->phone:'+0170000000'),
                'email' => Auth::user()->email,
                'customer_address' => (Auth::user()->address? Auth::user()->address:'N\L'),
                'customer_city' => "N/L",
                'customer_state' => "N/L",
                'customer_postcode' => "N/L",
                'customer_country' => Auth::user()->country->name
            );
            // dd($package,$income, $info);
            // Mail::to('tradevalyb2b@gmail.com')->send(new \App\Mail\AdvertiserPurchase($advertiser_Order));
            session(['orderInfo' => $info]);
            
$shurjopay_service = new ShurjopayController();return $shurjopay_service->checkout($info);
        }
    }

    public function pdf()
    {


        $data['pdfs'] = Pdf::where('company_id', Auth::user()->company->id)->get();

        return view('user.pages.pdf')->with($data);
    }

    // awrd functionality here
    public function award()
    {


        $data['pdfs'] = Award::where('company_id', Auth::user()->company->id)->get();

        return view('user.pages.award.index')->with($data);
    }

    public function addaward(Request $request)
    {

        if ($request->isMethod("post")) {
            $product = new Award();
            if ($request->hasFile('image')) {

                $image = $request->file('image');
                $thefile = \File::get($image);
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/user/pdf')) {
                    Storage::disk('public')->makeDirectory('images/user/pdf');
                }
                Storage::disk('public')->put('images/user/pdf/' . $imageName, $thefile);
                $product->image = $imageName;
            } else {
                Toastr::error('Failed!', 'Pdf File Is Required!');
                return redirect()->back();
            }
            $product->company_id = Auth::user()->company->id;
            $product->name = $request->name;
            if ($product->save()) {

                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();
            }
        }

        return view('user.pages.award.create');
    }

    public function delaward($id)
    {
        $award = Award::find($id);
        if (Storage::disk('public')->exists('images/user/pdf/' . $award->image)) {
            Storage::disk('public')->delete('images/user/pdf/' . $award->image);
        }
        $award->delete();
        Toastr::success('Success!', 'Award  deleted successfully!!');
        return redirect()->back();
    }

    public function certificate()
    {


        $certificates = Certificate::where('company_id', Auth::user()->company->id)->get();
        return view('user.pages.certificate', compact('certificates'));
    }


    public function addpdf(Request $request)
    {

        if ($request->isMethod("post")) {
            $product = new Pdf();
            if ($request->hasFile('image')) {

                $image = $request->file('image');
                $thefile = \File::get($image);
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/user/pdf')) {
                    Storage::disk('public')->makeDirectory('images/user/pdf');
                }
                Storage::disk('public')->put('images/user/pdf/' . $imageName, $thefile);
                $product->image = $imageName;
            } else {
                Toastr::error('Failed!', 'Pdf File Is Required!');
                return redirect()->back();
            }
            $product->company_id = Auth::user()->company->id;
            $product->name = $request->name;
            if ($product->save()) {

                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();
            }
        }

        return view('user.pages.addpdf');
    }


    public function addcertificate(Request $request)
    {

        if ($request->isMethod("post")) {
            dd('mehedi');
            $product = new Certificate();
            if ($request->hasFile('image')) {

                $image = $request->file('image');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/user/certificate/' . $product->image)) {
                    Storage::disk('public')->makeDirectory('images/user/certificate/' . $product->image);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/user/certificate/' . $imageName, $bannerImage);
                $product->image = $imageName;
            } else {
                Toastr::error('Failed!', 'Image File Is Required!');
                return redirect()->back();
            }
            $product->company_id = Auth::user()->company->id;
            $product->name = $request->name;
            if ($product->save()) {

                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();
            }
        }

        return view('user.pages.addcertificate');
    }

    public function offers()
    {


        $data['offers'] = BuyOffer::where('buyer_id', Auth::user()->id)->paginate(50);

        return view('user.pages.offers')->with($data);
    }


    public function recommand_offerglobal()
    {
        if (Auth::user()->category->parent_id == 0) {

            $data['offers'] = BuyOffer::where('seller_id', null)->where('category_id', Auth::user()->category->parent_id)->latest()->get();
        } else {
            $data['offers'] = BuyOffer::where('seller_id', null)->where('category_id', Auth::user()->category_id)->latest()->get();

        }


        //  $data['offers'] = $offers->where('title', 'like', '%' . Auth::guard('web')->user()->products . '%')->orWhere('details', 'like', '%' . Auth::guard('web')->user()->products . '%')->orWhere('tags', 'like', '%' . Auth::guard('web')->user()->products . '%')->get();
        return view('user.pages.buy_offers')->with($data);
    }

    public function recommand_offerforyou()
    {

        $data['offers'] = BuyOffer::where('seller_id', Auth::id())->orWhere('buyer_id',Auth::id())->latest()->get();


        //  $data['offers'] = $offers->where('title', 'like', '%' . Auth::guard('web')->user()->products . '%')->orWhere('details', 'like', '%' . Auth::guard('web')->user()->products . '%')->orWhere('tags', 'like', '%' . Auth::guard('web')->user()->products . '%')->get();
        return view('user.pages.buy_offers')->with($data);
    }

    public function recommand_offerforyou_details($id)
    {

        $data['messages'] = QuoteMessage::where('buy_offer_id', $id)->where('sender_id', Auth::id())->orWhere('receiver_id', Auth::id())->latest()->get();
        $data['offer'] = BuyOffer::where('id', $id)
                        ->where(function ($query) {
                            $query->where('seller_id', Auth::id())
                                  ->orWhere('buyer_id', Auth::id());
                        })
                        ->firstOrFail();
        $notification = AdminNotification::where('data',$id)->where('reciver',auth()->id())->first();
        if(isset($notification))
        {
            if($notification->seen == '')
            {
                $notification->seen= Carbon::now();
                $notification->save();
            }
        }
        return view('user.pages.buy_offer.buy_offer_details')->with($data);
    }
    public function sentMessage($id,$inquire)
    {
        $isMessage = MessageList::where('person_one',auth()->id())->where('person_two',$id)->count();
        if($isMessage>0)
        {
            $message_id = MessageList::where('person_one',auth()->id())->where('person_two',$id)->latest()->first();
            $inquire_title = BuyOffer::where('id',$inquire)->first()->title;
            
            $message = new InquiryMessage();
            $message->chat_id = $message_id->chat_id;
            $message->parent_id = auth()->id();
            $message->message = $inquire_title;
            $message->inquire_id = $inquire;
            $message->type = "inquire";
            $message->save();
            
            return redirect()->route('user.message.view',$message_id->chat_id);
        }else
        {
            $message = new MessageList();
            $message->chat_id="tv_message-".rand(1000000000,9999999999);
            $message->person_one = auth()->id();
            $message->person_two = $id;
            $message->updated_at = Carbon::now();
            $message->save();
            
            $chatId = MessageList::where('person_one',auth()->id())->latest()->first();
            $inquire_title = BuyOffer::where('id',$inquire)->first()->title;
            $message = new InquiryMessage();
            $message->chat_id = $chatId->chat_id;
            $message->parent_id = auth()->id();
            $message->message = $inquire_title;
            $message->inquire_id = $inquire;
            $message->type = "inquire";
            $message->save();
            
            return redirect()->route('user.message.view',$chatId->chat_id);
        }
        
    }

    public function inbox()
    {

        $data['offers'] = Thread::where('sender_id', Auth::user()->id)->orWhere('receiver_id', Auth::user()->id)->paginate(50);

        return view('user.pages.inbox')->with($data);
    }


    public function inbox_view(Request $request, $id)
    {


        if ($request->isMethod("post")) {
            $msg = new Message();
            $msg->thread_id = $id;
            $msg->sender_id = Auth::user()->id;
            $msg->description = $request->des;
            $msg->save();

            Toastr::success('Success!', 'Replied Sent!');
            return redirect()->back();
        }

        $messages = Message::where('thread_id', $id)->where('sender_id', '!=', Auth::user()->id)->orderBy('id', 'desc')->first();
        if ($messages != null) {
            $messages->seen_at = date('Y-m-d h:i:s');
            $messages->save();
        }
        $data['thread'] = Thread::findorFail($id);
        $data['offers'] = Message::where('thread_id', $id)->get();
        return view('user.pages.inbox_view')->with($data);
    }

    public function delpdf($id)
    {
        $work = Pdf::find($id);
        if (Storage::disk('public')->exists('images/user/pdf/' . $work->image)) {
            Storage::disk('public')->delete('images/user/pdf/' . $work->image);
        }
        $work->delete();
        Toastr::success('Success!', 'Pdf deleted!');
        return redirect()->back();
    }

    public function delcertificate($id)
    {
        $work = Certificate::find($id);
        if (Storage::disk('public')->exists('images/user/certificate/' . $work->image)) {
            Storage::disk('public')->delete('images/user/certificate/' . $work->image);
        }
        $work->delete();
        Toastr::success('Success!', 'Certififcate deleted!');
        return redirect()->back();
    }


   

    public function deloffer($id)
    {
        $work = BuyOffer::find($id)->delete();
        Toastr::success('Success!', 'Offer deleted!');
        return redirect()->back();
    }




    public function editoffer(Request $request, $id)
    {
        $product = BuyOffer::find($id);
        if ($request->isMethod("post")) {


            $product->title = $request->title;
            $product->details = $request->des;
            $product->tags = json_encode($request->tags);
            $product->status = 0;

            if ($product->save()) {
                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();
            }
        }
        $data['product'] = $product;
        $data['tags'] = Tag::all();
        $data['caegories'] = Category::all();
        return view('user.pages.editoffer')->with($data);
    }


    public function addoffer(Request $request)
    {

        if ($request->isMethod("post")) {

            $product = new BuyOffer();
            $product->status = 0;
            $product->ip = visitorip();
            $product->title = $request->title;
            $product->date = date('Y-m-d');
            $product->slug = Str::slug($request->title);
            $product->details = $request->des;
            $product->country_id = Auth::user()->country_id;
            if ($request->filled('child_id')) {
                $product->category_id = $request->child_id;
                $product->sub_id = $request->sub_id;
                $product->child_id = $request->category_id;
            } else {
                $product->category_id = $request->sub_id;
                $product->sub_id = $request->category_id;
            }
            $product->tags = json_encode($request->tags);
            $product->buyer_id = Auth::user()->id;

            if ($product->save()) {
                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();
            }
        }

        $data['tags'] = Tag::all();
        $data['caegories'] = Category::all();
        return view('user.pages.addoffer')->with($data);
    }



    public function setting(Request $request)
    {
        if ($request->isMethod("post")) {
            // dd($request->type);
            
            $company = Company::where('id', Auth::user()->company->id)->first();
            $company->des = $request->des;
            $company->overview = $request->overview;
            $company->name = $request->name;
            if ($request->filled('type')) {
                $company->type = implode(',', $request->type);
            }
            $company->main_products = json_encode($request->main_products);
            $company->address = $request->address;
            $company->phone = $request->phone;
            $company->total_staff = $request->total_staff;
            $company->employee = $request->employee;
            $company->revenue = $request->revenue;
            $company->location = $request->location;
            $company->web = $request->web;
            $company->year = $request->year;
            $company->main_market = $request->main_market;
            $company->youtube = $request->youtube;
            //   $company->conduct = $request->conduct;
            //   $company->patent = $request->patent;
            //   $company->awards = $request->awards;
            //   $company->equipment = $request->equipment;
            $company->story = $request->story;
            $company->meta_author = $request->meta_author;
            $company->meta_title = $request->meta_title;
            $company->meta_description = $request->meta_description;
            $company->meta_tage = $request->meta_tage;


            if ($request->hasFile('image')) {
                $image = $request->file('image');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (Storage::disk('public')->exists('images/user/avatar/' . $request->image)) {
                    Storage::disk('public')->delete('images/user/avatar/' . $request->image);
                }
                $bannerImage = Image::make($image)->resize(170, 170)->stream();
                Storage::disk('public')->put('images/user/avatar/' . $imageName, $bannerImage);
                $company->image = $imageName;
            }
            $company->save();
            Toastr::success('Success!', 'Setting Updated!');
            return redirect()->back();
        }
        $data['company'] = Company::where('id', Auth::user()->company->id)->first();

        return view('user.pages.setting')->with($data);

    }


    public function featuredsubmit($id, Request $request)
    {
        $product = Product::findorFail($id);
        if ($request->isMethod("post")) {
            $featured = new FeaturedRequest();
            $featured->product_id = $product->id;
            $featured->user_id = Auth::user()->id;
            $featured->notes = $request->notes;
            if ($featured->save()) {
                return redirect()->route('user.featuredlist');
            }
        }

        return view('user.pages.submitfeatured', compact('product'));
    }

    public function featured_product_add(Request $request)
    {
        dd($request);
    }


    public function featuredlist(Request $request)
    {
        $products = FeaturedRequest::where('user_id', Auth::user()->id)->latest();
        if ($request->filled('status')) {
            $products = $product->where('status', $request->status);
        }
        $products = $products->paginate(50);
        return view('user.pages.featuredlist', compact('products'));
    }

    public function activefeatureProfuctlist(Request $request)
    {
        $products = FeaturedProduct::where('user_id', Auth::user()->id)->latest();
        $products = $products->paginate(20);
        return view('user.pages.feature.active_product', compact('products'));
    }

    public function featuredlistdelete($id)
    {
        $product = FeaturedProduct::where('id', $id)->where('user_id', Auth::user()->id)->firstOrFail();
        $product->delete();
        Toastr::success('Delete!', 'Feature Product Deleted Successfully !!');
        return back();
    }


    public function profile_view()
    {
        return view('user.pages.profile_view');
    }


    public function basic_infirmation(Request $request)
    {

        $user = User::find(Auth::guard('web')->user()->id);
        $user->name = $request->name;
        $user->industry = $request->industry;
        $user->category_id = $request->industry;
        $user->address = $request->address;
        $user->city = $request->city;
        $user->products = $request->products;
        $user->gender = $request->gender;
        $user->postal = $request->postal;
        $user->state = $request->state;
        $user->country_id = $request->country_id;
        $user->type = $request->type;
        $user->qq = $request->qq;
        $user->skype = $request->skype;
        $user->wechat = $request->wechat;
        $user->whatsapp = $request->whatsapp;
        if ($request->hasFile('image')) {
            $image = $request->file('image');
            $currentDate = Carbon::now()->toDateString();
            $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
            if (Storage::disk('public')->exists('images/user/avatar/' . $request->image)) {
                Storage::disk('public')->delete('images/user/avatar/' . $request->image);
            }
            $bannerImage = Image::make($image)->resize(900, 800)->stream();
            Storage::disk('public')->put('images/user/avatar/' . $imageName, $bannerImage);
            $user->image = $imageName;
        }
        if ($user->save()) {
            Toastr::success('Success!', 'Setting Updated!');
            return redirect()->route('user.profile.view');
        }
        return print_r($request->all());
    }


    public function feature_delete_by_product($id)
    {

        $feature_requests = FeaturedRequest::where('user_id', $id)->get();
        if ($feature_requests) {
            foreach ($feature_requests as $feature_request) {
                $feature_request->delete();
            }
        }


        $feature_products = FeaturedProduct::where('user_id', $id)->latest()->get();
        foreach ($feature_products as $feature_product) {
            $feature_product->delete();
        }
    }

    public function buy_offer_delete_by_product($id)
    {
        $buy_offers = BuyOffer::where('buyer_id', $id)->orWhere('seller_id', $id)->get();
        if ($buy_offers) {
            foreach ($buy_offers as $buy_offer) {
                $buy_offer->delete();
            }
        }
    }

    public function activebuy_advertiser()
    {
        $data['advertisers'] = AdvertiserOrder::where('user_id', Auth::id())->where('status', 'active')->whereNotNull('start_date')->latest()->get();
        return view('user.pages.advertiser.active')->with($data);
    }

    public function my_pending_buy_advertiser()
    {
        $data['advertisers'] = AdvertiserOrder::where('user_id', Auth::id())->where('status', 'pending')->latest()->get();
        return view('user.pages.advertiser.pending')->with($data);
    }

    public function my_all_buy_advertiser()
    {
        $transactions = Transaction::where('user_id',Auth::id())->latest()->get();
        // return($transactions);
        return view('user.pages.invoice.index',['transactions' => $transactions]);
    }

    public function advertiserInvoiceDetails($id)
    {
        $invoice = AdvertiserOrder::with('user:id,name,industry,email,package_id,type,address,products,country_id')->where('id', $id)->where('user_id',Auth::id())->firstOrFail();
        return view('user.pages.advertiser.invoice',compact('invoice'));
        // $invoice = AdvertiserOrder::with('user:id,name,industry,email,package_id,type,address,products,country_id')->where('id', $id)->firstOrFail();
        // return view('user.pages.advertiser.invoice', compact('invoice'));
    }

    public function advertiserMoneyReceipt($id)
    {
        $money_receipt = AdvertiserOrder::where('id', $id)->firstOrFail();
        return view('user.pages.advertiser.money_receipt', compact('money_receipt'));
    }

    public function advertiserPostpaidPayment($id)
    {
        $invoice = AdvertiserOrder::with('user:id,name,phone,industry,email,package_id,type,address,products,country_id')->where('id', $id)->firstOrFail();
        $user = $invoice->user;
        $info = array(
            'currency' => 'BDT',
            'amount' => intval($invoice->amount),
            'order_id' => $invoice->order_id,
            'discsount_amount' => 0,
            'disc_percent' => 0,
            'client_ip' => 'N\L',
            'customer_name' => $user->name,
            'customer_phone' => $user->phone,
            'email' => $user->email,
            'customer_address' => "N\L",
            'customer_city' => "N/L",
            'customer_state' => "N/L",
            'customer_postcode' => "N/L",
            'customer_country' => Country::find($user->country_id)->name
        );
        $order = [
            'order_id' => $invoice->order_id,
            'order_for' => 'advertiser'
        ];
        session(['orderInfo' => $order]);
        $shurjopay_service = new ShurjopayController();
        return $shurjopay_service->checkout($info);
    }
    
    public function products()
    {


        $data['products'] = Product::where('supplier_id', Auth::user()->id)->where('status', 1)->paginate(50);

        return view('user.pages.products')->with($data);
    }
    public function pending_product()
    {


        $data['products'] = Product::where('supplier_id', Auth::user()->id)->where('status', 0)->paginate(50);

        return view('user.pages.products')->with($data);
    }

    public function rej_product()
    {
        $data['products'] = Product::where('supplier_id', Auth::user()->id)->where('status', 5)->paginate(50);

        return view('user.pages.products')->with($data);
    }

    public function trashed_product()
    {
        $data['products'] = Product::onlyTrashed()->where('supplier_id', Auth::user()->id)->paginate(50);

        return view('user.pages.products')->with($data);
    }

    public function delproduct($id)
    {
        $product = Product::findOrFail($id);
        $this->feature_delete_by_product($product->id);
        $this->buy_offer_delete_by_product($product->id);
        $product->delete();

        Toastr::success('Success!', 'Product deleted!');
        return redirect()->back();
    }

    public function trashed_product_destroy($id)
    {
        $product = Product::onlyTrashed()->where('id', $id)->where('supplier_id', Auth::id())->firstOrFail();
        $this->delete_trash_product($product);
        Toastr::success('Success!', 'Product Permanent Deleted!');
        return redirect()->back();
    }

    public function trash_product_rerurn($id)
    {
        $product = Product::onlyTrashed()->where('id', $id)->where('supplier_id', Auth::id())->firstOrFail();
        if (!Category::find($product->child_id)) {
            Toastr::error('Error!', "Product Category Has Been Deleted You can't Restore The Product ");
            return back();
        }
        $this->restore_trash_product($product);
        Toastr::success('Success!', 'Product Restore Successfully!');
        return back();
    }

    // Trashed Product Restore Methods

    public function restore_trash_product($product)
    {
        $product->restore();
        return true;

    }

    // Trashed Product Permanent Methods
    public function delete_trash_product($product)
    {

        $this->feature_delete_by_product($product->id);
        $this->buy_offer_delete_by_product($product->id);
        if ($product->image !== 'image.jpg') {
            if (Storage::disk('public')->exists('images/admin/product/' . $product->image)) {
                Storage::disk('public')->delete('images/admin/product/' . $product->image);
            }
        }
        if (Storage::disk('public')->exists('images/admin/product/' . $product->gallary1)) {
            Storage::disk('public')->delete('images/admin/product/' . $product->gallary1);
        }
        if (Storage::disk('public')->exists('images/admin/product/' . $product->gallary2)) {
            Storage::disk('public')->delete('images/admin/product/' . $product->gallary2);
        }
        if (Storage::disk('public')->exists('images/admin/product/' . $product->gallary3)) {
            Storage::disk('public')->delete('images/admin/product/' . $product->gallary3);
        }
        if (Storage::disk('public')->exists('images/admin/product/' . $product->gallary4)) {
            Storage::disk('public')->delete('images/admin/product/' . $product->gallary4);
        }
        $product->forceDelete();
        return true;
    }

    public function editproduct(Request $request, $id)
    {
        $product = Product::find($id);
        if ($request->isMethod("post")) {


            if ($request->hasFile('image')) {

                $image = $request->file('image');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->image)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->image);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->image = $imageName;
            }


            if ($request->hasFile('gallary1')) {

                $image = $request->file('gallary1');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary1)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary1);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary1 = $imageName;
            }


            if ($request->hasFile('gallary2')) {

                $image = $request->file('gallary2');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary2)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary2);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary2 = $imageName;
            }


            if ($request->hasFile('gallary3')) {

                $image = $request->file('gallary3');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary3)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary3);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary3 = $imageName;
            }


            if ($request->hasFile('gallary4')) {

                $image = $request->file('gallary4');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary4)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary4);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary4 = $imageName;
            }


            $product->ip = visitorip();
            $product->title = $request->title;
            $product->date = date('Y-m-d');
            $product->slug = Str::slug($request->title);
            $product->details = $request->des;
            $product->country_id = Auth::user()->country_id;
            if ($request->filled('child_id')) {
                $product->category_id = $request->category_id;
                $product->sub_id = $request->sub_id;
                $product->child_id = $request->child_id;
            } else {
                $product->category_id = $request->category_id;
                $product->sub_id = $request->sub_id;
            }
            $product->status = 0;
            $product->video = $request->video;
            $product->tags = json_encode($request->tags);
            $product->processing_time = $request->processing_time;
            $product->port = $request->port;
            $product->unit = $request->unit;
            $product->supply_ability = $request->supply_ability;
            $product->payment_method = $request->payment_method;
            $product->origin = $request->origin;
            $product->location = $request->location;
            $product->currency = $request->currency;
            $product->stock = $request->stock;
            $product->location = $request->location;
            $product->supplier_id = Auth::user()->id;

            if ($product->save()) {
                Toastr::success('Success!', 'Setting Updated!');
                return redirect()->back();


            }
        }
        $data['product'] = $product;
        $data['gallaries'] = Thumb::where('product_id', $product->id)->get();
        $data['tags'] = Tag::all();
        $data['caegories'] = Category::all();
        $data['method'] = Method::all();
        return view('user.pages.editproduct')->with($data);
    }

    public function addproduct(Request $request)
    {

        if ($request->isMethod("post")) {
            //return json_encode($request->all());
            $request->validate([
                'qty' => ['nullable']
            ]);
            $product = new Product();


            if ($request->hasFile('brochure')) {

                $image = $request->file('brochure');
                $thefile = \File::get($image);
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product')) {
                    Storage::disk('public')->makeDirectory('images/admin/product');
                }
                Storage::disk('public')->put('images/admin/product/' . $imageName, $thefile);
                $product->brochure = $imageName;
            }


            if ($request->hasFile('image')) {

                $image = $request->file('image');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->image)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->image);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->image = $imageName;
            } else {
                $imageName = "product.jpg";
            }


            if ($request->hasFile('gallary1')) {

                $image = $request->file('gallary1');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary1)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary1);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary1 = $imageName;
            } else {
                $imageName = "product.jpg";
            }


            if ($request->hasFile('gallary2')) {

                $image = $request->file('gallary2');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary2)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary2);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary2 = $imageName;
            } else {
                $imageName = "product.jpg";
            }


            if ($request->hasFile('gallary3')) {

                $image = $request->file('gallary3');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary3)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary3);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary3 = $imageName;
            } else {
                $imageName = "product.jpg";
            }


            if ($request->hasFile('gallary4')) {

                $image = $request->file('gallary4');
                $currentDate = Carbon::now()->toDateString();
                $imageName = $currentDate . '-' . uniqid() . '.' . $image->getClientOriginalExtension();
                if (!Storage::disk('public')->exists('images/admin/product/' . $product->gallary4)) {
                    Storage::disk('public')->makeDirectory('images/admin/product/' . $product->gallary4);
                }
                $bannerImage = Image::make($image)->resize(500, 500)->stream();
                Storage::disk('public')->put('images/admin/product/' . $imageName, $bannerImage);
                $product->gallary4 = $imageName;
            } else {
                $imageName = "product.jpg";
            }
            if ($request->filled('child_id')) {
                $product->category_id = $request->child_id;
                $product->sub_id = $request->sub_id;
                $product->child_id = $request->category_id;
            } else {
                $product->category_id = $request->sub_id;
                $product->sub_id = $request->category_id;
            }

            $product->ip = visitorip();
            $product->title = $request->title;
            $product->date = date('Y-m-d');
            $product->slug = Str::slug($request->title);
            $product->tags = json_encode($request->tags);
            $product->model_number = $request->model_number;
            $product->brand = $request->brand;
            $product->material = $request->material;
            $product->origin = $request->origin;
            $product->price_type = $request->price_type;


            if (isset($request['outer-group'][0]['inner-group']) && is_array($request['outer-group'][0]['inner-group'])) {
                $product->attr = json_encode($request['outer-group'][0]['inner-group']);
            }

            if ($request->price_type == 'fob') {
                $product->currency = $request->currency;
                $product->min = $request->min;
                $product->max = $request->max;
                $product->unit = $request->unit;
                $product->min_qty = $request->min_qty;
            } else {

            }
            if ($request->filled('other_payment_methods')) {
                $arr = array($request->other_payment_methods);
                $product->payment_method = json_encode(array_push($arr, $request->payment_ids));

            } else {
                $product->payment_method = json_encode($request->payment_ids);
            }
            $product->supply_type = $request->supply_type;
            $product->port = $request->port;
            $product->processing_time = $request->processing_time;
            $product->qty = $request->qty;
            $product->details = $request->des;
            $product->country_id = Auth::user()->country_id;

            $product->unit = $request->units;
            $product->shipping_time = $request->shipping_time;
            $product->details = $request->des;
            $product->supplier_id = Auth::user()->id;
            $product->meta_description = $request->meta_description;
            $product->meta_keyword = $request->meta_keyword;

            if ($product->save()) {

                Toastr::success('Success!', 'Setting Updated!');

                if (Auth::user()->verified == 1) {
                    return redirect()->back();
                    //   return redirect()->route('user.featured.submit', $product->id);
                }
                return redirect()->back();
            }
        }

        $data['tags'] = Tag::all();
        $data['caegories'] = Category::where('parent_id', 0)->get();
        $data['method'] = Method::all();
        return view('user.pages.addproducts')->with($data);
    }

}