<?php

namespace App\Http\Controllers\Api\v1;

use App\UserCoupon;
use App\ManagerPlan;
use App\User;
use App\SubscriptionPlans;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Maatwebsite;

/**
 * User
 */
class UserCouponController extends Controller {

    /**
     *
     * @author     Pradip valand <pradip.valand@brainvire.com>
     */
    public function __construct() {
        
    }

    /**
     * Create the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        $this->validate($request, [
            'coupon_code' => 'required|unique:user_coupon',
            'percentage' => 'required',
            'start_date' => 'required',
            'expiry_date' => 'required',
        ]);

        try {
            $data = $request->all();
            $insertData = UserCoupon::create($data);
            //return response
            return response()->json(['status' => 'success', 'message' => COUPON_CREATED]);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     *
     * @author     Pradip valand <pradip.valand@brainvire.com>
     * @return coupon Array
     */
    public function index() {

        try {
            $data = UserCoupon::select('id', 'coupon_code', 'percentage', 'status', 'start_date', 'expiry_date')->orderBy('id', 'DESC')->get();
            
            $helperObj = new \App\CommonHelper();
            $dateformat = env("DATE_FORMAT");
            //return 
            if (!empty($data)) {
                foreach($data as $key => $val){
                    $data[$key]->start_date = $helperObj->convertDateByFormat($val->start_date, $dateformat);
                    $data[$key]->expiry_date = $helperObj->convertDateByFormat($val->expiry_date, $dateformat);
                }
            }
            return response()->json($data);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     *
     * @author     Pradip valand <pradip.valand@brainvire.com>
     * @param @id
     * @return coupon Array
     */
    public function show($id) {

        try {
            $data = UserCoupon::select('coupon_code', 'percentage', 'status', 'start_date', 'expiry_date', 'description')->where('id', $id)->first();
            //return
            return response()->json($data);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id) {

        $this->validate($request, [
            'coupon_code' => 'required|unique:user_coupon,coupon_code,' . $id,
            'percentage' => 'required',
            'start_date' => 'required',
            'expiry_date' => 'required',
        ]);

        try {
            $data = $request->all();
            $updateData = UserCoupon::where('id', $id)->update($data);
            //return response
            return response()->json(['status' => 'success', 'message' => COUPON_UPDATED]);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int $rid
     * @return \Illuminate\Http\Response
     */
    public function destroy($id) {
        if (UserCoupon::destroy($id)) {
            return response()->json(['status' => 'success', 'message' => COUPON_DELETED]);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function changeStatus(Request $request) {
        $this->validate($request, [
            'id' => 'required',
            'status' => 'required',
        ]);

        try {
            $data['status'] = $request->status;
            $updateData = UserCoupon::where('id', $request->id)->update($data);
            //return response
            return response()->json(['status' => 'success', 'message' => STATUS_CHANGED]);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Check staus
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function checkStatus(Request $request) {

        $this->validate($request, [
            'coupon_code' => 'required',
            'manager_id' => 'required',
        ]);

        try {
            $data = UserCoupon::select('id', 'status', 'start_date', 'expiry_date', 'coupon_code', 'percentage')->where('coupon_code', $request->coupon_code)->first();

            if ($data) {

                $planCount = ManagerPlan::where('manager_id', $request->manager_id)->where('coupon_id', $data->id)->count();


                if ($planCount > 0) {
                    return response()->json(['status' => 'fail', 'message' => 'Promocode is already used.']);
                }

                if ($data->status == 'Inactive') {
                    return response()->json(['status' => 'falis', 'message' => COUPON_INACTIVE]);
                } else {

                    $date = date('Y-m-d');

                    if ($data->start_date <= $date && $data->expiry_date >= $date) {

                        $successMessage = 'Your code has applied successfully. You got ' . $data->percentage . '% discount on this plan.';

                        return response()->json(['status' => 'success', 'message' => $successMessage, 'discount' => $data->percentage]);
                    } else {
                        return response()->json(['status' => 'falis', 'message' => COUPON_EXPIRED]);
                    }
                }
            } else {
                return response()->json(['status' => 'falis', 'message' => COUPON_INVALID]);
            }
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Coupon Report
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function couponReport(Request $request) {

        try {
            $data = UserCoupon::select('id', 'coupon_code', 'percentage', 'status', 'start_date', 'expiry_date', 'coupon_used')->orderBy('id', 'ASC')->get();

            $helperObj = new \App\CommonHelper();
            $dateformat = env("DATE_FORMAT");
            //return 
            if (!empty($data)) {
                foreach($data as $key => $val){
                    $data[$key]->start_date = $helperObj->convertDateByFormat($val->start_date, $dateformat);
                    $data[$key]->expiry_date = $helperObj->convertDateByFormat($val->expiry_date, $dateformat);
                }
            }
            //return 
            return response()->json($data);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Coupon Detail
     *
     * @param @id
     * @return \Illuminate\Http\Response
     */
    public function couponReportDetail($id) {
   
        try {

            $reportDetail = ManagerPlan::select('users.name', 'manager_plans.plan_price', 'manager_plans.discount', 'manager_plans.status', 'manager_plans.no_of_used_users', 'manager_plans.activated_at', 'manager_plans.expire_on', 'subscription_plans.name as planName','organizations.name as organizations_name')
                ->leftjoin('users', 'users.id', 'manager_plans.manager_id')
                ->leftjoin('organizations', 'organizations.user_id', 'manager_plans.manager_id')
                ->leftjoin('subscription_plans', 'subscription_plans.id', 'manager_plans.plan_id')
                ->where('manager_plans.coupon_id', $id)->orderBy('manager_plans.id', 'DESC')->get();

            //return 
            return response()->json($reportDetail);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * Export Coupon Report
     * @param Request $request
     * @return type
     */
    public function exportExcel(Request $request) {

        try {
            $result = UserCoupon::select('id', 'coupon_code', 'percentage', 'status', 'start_date', 'expiry_date', 'coupon_used')->orderBy('id', 'ASC')->get();
            $helperObj = new \App\CommonHelper();
            $dateformat = env("DATE_FORMAT");
            //return 
            if (!empty($result)) {
                foreach($result as $key => $val){
                    $result[$key]->start_date = $helperObj->convertDateByFormat($val->start_date, $dateformat);
                    $result[$key]->expiry_date = $helperObj->convertDateByFormat($val->expiry_date, $dateformat);
                }
            }
            $filePath['user_excel_report_path'] = $this->exportData($result);
            return response()->json($filePath);
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

    /**
     * @param type $returnData
     * @return type
     */
    public function exportData($returnData) {

        $path = $this->public_path('uploads/export/CouponReport');

        if (!File::isDirectory($path)) {
            File::makeDirectory($path, 0777, true, true);
        }

        $fileName = 'CouponReport_' . time();
        Maatwebsite\Excel\Facades\Excel::create($fileName, function($excel) use ($returnData) {
                    // Set the spreadsheet title, creator, and description
                    $excel->setTitle('CouponReport_' . time());
                    $excel->setCreator('Laravel'); //->setCompany('WJ Gilmore, LLC');
                    $excel->setDescription('Coupon Report');

                    // Build the spreadsheet, passing in the payments array
                    $excel->sheet('sheet1', function($sheet) use ($returnData) {
                        $sheet->cell('A1', function ($cell) {
                            $cell->setValue('Promocode');
                        });
                        $sheet->cell('B1', function ($cell) {
                            $cell->setValue('Discount (In Percentage)');
                        });
                        $sheet->cell('C1', function ($cell) {
                            $cell->setValue('Start Date');
                        });
                        $sheet->cell('D1', function ($cell) {
                            $cell->setValue('Expiry Date');
                        });
                        $sheet->cell('E1', function ($cell) {
                            $cell->setValue('Total Used');
                        });
                        $sheet->cell('F1', function ($cell) {
                            $cell->setValue('Status');
                        });


                        if (!empty($returnData)) {
                            foreach ($returnData as $key => $value) {
                                $i = $key + 2;
                                $sheet->cell('A' . $i, $value['coupon_code']);
                                $sheet->cell('B' . $i, $value['percentage']);
                                $sheet->cell('C' . $i, $value['start_date']);
                                $sheet->cell('D' . $i, $value['expiry_date']);
                                $sheet->cell('E' . $i, $value['coupon_used']);
                                $sheet->cell('F' . $i, $value['status']);
                            }
                        }
                    });
                })
                ->store('xls', $path);
        return 'CouponReport/' . $fileName;
    }

    /**
     * Return the path to public dir.
     *
     * @param null $path
     * @return string
     */
    function public_path($path = null) {
        return rtrim(app()->basePath('public/' . $path), '/');
    }

    /**
     * @param Request $request
     * @param type $type
     * @param type $file
     * @return type
     */
    public function download($type, $file) {

        if ($file != '') {
            if (file_exists('uploads/export/' . $type . '/' . $file . '.xls')) {

                return response()->download('uploads/export/' . $type . '/' . $file . '.xls')->deleteFileAfterSend(true);
                //return response()->download('uploads/'.$file);
                exit;
            } else {
                return redirect(url('/') . '404');
            }
        } else {
            return redirect(url('/') . '404');
        }
    }

    /**
     * @author Jatin parmar
     * @param Request $request
     * @param type $type
     * @param type $file
     * @return type
     */
    public function get_coupon_usage_old(Request $request, $id, $perpage) {
        try {
            $Coupon = UserCoupon::find($id);
            if (!empty($Coupon)) {
                //  DB::enableQueryLog();
                $condition = array('coupon_id' => $id);
                if ($request->has('plan_id') && $request->plan_id != '') {
                    $condition['plan_id'] = $request->plan_id;
                }
                if ($request->has('username') && $request->username != '') {
                    $username = $request->username;
                    $UserCoupon = ManagerPlan::with(['user' => function ($query) use ( $username ) {
                                    $query->where('name', 'like', '%' . $username . '%');
                                }, 'subscription'])
                            ->where($condition)
                            ->paginate();
                } else {
                    $UserCoupon = ManagerPlan::with(['user', 'subscription'])
                            ->where($condition)
                            ->paginate($perpage);
                }

                $UserCoupon = json_decode(json_encode($UserCoupon, TRUE), TRUE);

                $pagination['total_record'] = $UserCoupon['total'];
                $pagination['per_page'] = $UserCoupon['per_page'];
                $pagination['last_page'] = $UserCoupon['last_page'];
                $pagination['next_page_url'] = $UserCoupon['next_page_url'];
                $pagination['prev_page_url'] = $UserCoupon['prev_page_url'];
                $pagination['from'] = $UserCoupon['from'];
                $pagination['to'] = $UserCoupon['to'];

                $usage_array = array();
                foreach ($UserCoupon['data'] as $k => $v) {
                    if ($v['user'] == null || !isset($v['user']['name'])) {
                        continue;
                    }
                    $usage_array[$k]['plan_id'] = $v['plan_id'];
                    $usage_array[$k]['coupon_id'] = $v['coupon_id'];
                    $usage_array[$k]['username'] = $v['user']['name'];
                    $usage_array[$k]['email'] = $v['user']['email'];
                    $usage_array[$k]['profile_pic'] = $v['user']['profile_pic'];
                    $usage_array[$k]['role'] = $v['user']['role'];
                    $usage_array[$k]['subscription_name'] = $v['subscription']['name'];
                    $usage_array[$k]['subscription_price'] = $v['plan_price'];
                    $usage_array[$k]['activated_at'] = $v['activated_at'];
                    $usage_array[$k]['expire_on'] = $v['expire_on'];
                }
                //  $UserCoupon['total_usage_data'] = $total_usage;
                $usage_array = array_values($usage_array);
              
                if (!empty($usage_array)) {
                    return response()->json(array('status' => 200, 'message' => 'Records Found', 'pagination' => $pagination, 'coupon' => $Coupon, 'data' => $usage_array));
                    die();
                } else {
                    return response()->json(array('status' => 404, 'message' => 'Records Not Found', 'pagination' => $pagination, 'coupon' => $Coupon, 'data' => $usage_array));
                    die();
                }
            } else {
                return response()->json(array('status' => 404, 'message' => 'Invalid coupon', 'data' => []));
                die();
            }
        } catch (Exception $e) {
            return response()->json(['status' => 'fails', 'message' => SOMETHING_WENT_WRONG]);
            die();
        }
    }

    public function get_coupon_usage(Request $request, $id, $perpage) {
        try {
            $Coupon = UserCoupon::find($id);
            if (!empty($Coupon)) {
                //  DB::enableQueryLog();
                $condition = array('coupon_id' => $id);
                if ($request->has('plan_id') && $request->plan_id != '') {
                    $condition['plan_id'] = $request->plan_id;
                }

                if ($request->has('username') && $request->username != '') {
                    $username = $request->username;
                    $UserCoupon = DB::table('manager_plans')
                            ->join('users', 'manager_plans.manager_id', '=', 'users.id')
                            ->leftjoin('organizations', 'organizations.user_id', 'manager_plans.manager_id')
                            ->join('subscription_plans', 'manager_plans.plan_id', '=', 'subscription_plans.id')
                            ->select('manager_plans.plan_id','manager_plans.final_price','manager_plans.promo_discount','manager_plans.coupon_id','manager_plans.status as plan_status', 'users.name as username', 'users.email', 'users.profile_pic', 'users.role',  'subscription_plans.name as subscription_name','subscription_plans.price as subscription_price','manager_plans.activated_at','manager_plans.expire_on','organizations.name as organizations_name')
                            ->where($condition)
                            ->where('users.name', 'like', '%' . $username . '%')
                            ->paginate($perpage);
                } else {
                    $UserCoupon = DB::table('manager_plans')
                            ->join('users', 'manager_plans.manager_id', '=', 'users.id')
                            ->leftjoin('organizations', 'organizations.user_id', 'manager_plans.manager_id')
                            ->join('subscription_plans', 'manager_plans.plan_id', '=', 'subscription_plans.id')
                            ->select('manager_plans.plan_id','manager_plans.final_price','manager_plans.promo_discount','manager_plans.coupon_id','manager_plans.status as plan_status', 'users.name as username', 'users.email', 'users.profile_pic', 'users.role',  'subscription_plans.name as subscription_name','subscription_plans.price as subscription_price','manager_plans.activated_at','manager_plans.expire_on','organizations.name as organizations_name')
                            ->where($condition)
                            ->paginate($perpage);
                }
                $UserCoupon = json_decode(json_encode($UserCoupon, TRUE), TRUE);
                $pagination['total_record'] = $UserCoupon['total'];
                $pagination['per_page'] = $UserCoupon['per_page'];
                $pagination['last_page'] = $UserCoupon['last_page'];
                $pagination['next_page_url'] = $UserCoupon['next_page_url'];
                $pagination['prev_page_url'] = $UserCoupon['prev_page_url'];
                $pagination['from'] = $UserCoupon['from'];
                $pagination['to'] = $UserCoupon['to'];
                
                $usage_array = array_values($UserCoupon['data']);
                if (!empty($usage_array)) {
                    return response()->json(array('status' => 200, 'message' => 'Records Found', 'pagination' => $pagination, 'coupon' => $Coupon, 'data' => $usage_array));
                    die();
                } else {
                    return response()->json(array('status' => 404, 'message' => 'Records Not Found', 'pagination' => $pagination, 'coupon' => $Coupon, 'data' => $usage_array));
                    die();
                }
            } else {
                return response()->json(array('status' => 404, 'message' => 'Invalid coupon', 'data' => []));
                die();
            }
        } catch (Exception $e) {
            return response()->json(['status' => 'fails', 'message' => SOMETHING_WENT_WRONG]);
            die();
        }
    }

    /**
     * @author Jatin parmar
     * @param Request $request
     * @param type $type
     * @param type $file
     * @return type
     */
    public function export_coupon_usage(Request $request, $id) {
        try {
            $Coupon = UserCoupon::find($id);
            if (!empty($Coupon)) {

                $condition = array('coupon_id' => $id);
                if ($request->has('plan_id') && $request->plan_id != '') {
                    $condition['plan_id'] = $request->plan_id;
                }
                if ($request->has('username') && $request->username != '') {
                    $username = $request->username;
                    $UserCoupon = ManagerPlan::with(['user' => function ($query) use ( $username ) {
                                    $query->where('name', 'like', '%' . $username . '%');
                                }, 'subscription'])
                             ->select('manager_plans.*', 'organizations.name as organizations_name')
                             ->leftjoin('organizations', 'organizations.user_id', 'manager_plans.manager_id')
                            ->where($condition)
                            ->get();
                } else {
                    $UserCoupon = ManagerPlan::with(['user', 'subscription'])
                                ->select('manager_plans.*', 'organizations.name as organizations_name')
                                ->leftjoin('organizations', 'organizations.user_id', 'manager_plans.manager_id')
                            ->where($condition)
                            ->get();
                }
                //$UserCoupon = ManagerPlan::with('user', 'subscription')->where('coupon_id', $id)->get();

                $usage_array = array();
                foreach ($UserCoupon as $k => $v) {
                    if ($v['user'] == null || !isset($v['user']['name'])) {
                        continue;
                    }
                    $usage_array[$k]['username'] = $v['user']['name'];
                    $usage_array[$k]['email'] = $v['user']['email'];
                    $usage_array[$k]['subscription_name'] = $v['subscription']['name'];
                    $usage_array[$k]['subscription_price'] = $v['plan_price'];
                    $usage_array[$k]['final_price'] = $v['final_price'];
                    $usage_array[$k]['promo_discount'] = $v['promo_discount'];
                    $usage_array[$k]['status'] = $v['status'];
                    $usage_array[$k]['activated_at'] = $v['activated_at'];
                    $usage_array[$k]['expire_on'] = $v['expire_on'];
                    $usage_array[$k]['organizations_name'] = $v['organizations_name'];
                }

                if (!empty($usage_array)) {
                    $usage_array = array_values($usage_array);
                    $filePath['user_excel_report_path'] = $this->exportUsageCouponReport($usage_array);
                    return response()->json($filePath);
                    die();
                } else {
                    $filePath['user_excel_report_path'] = $this->exportUsageCouponReport($usage_array);
                    return response()->json($filePath);
                    die();
                }
            } else {
                return response()->json(array('status' => 404, 'message' => 'Invalid coupon', 'data' => []));
                die();
            }
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'fails', 'message' => $e->getMessage() . SOMETHING_WENT_WRONG]);
        }
    }

    /**
     * @author Jatin Parmar 
     * Export Usage Coupon Report
     * @param Request $request
     * @return type
     */
    public function exportUsageCouponReport($returnData) {

        $path = $this->public_path('uploads/export/UsageCouponReport');

        if (!File::isDirectory($path)) {
            File::makeDirectory($path, 0777, true, true);
        }

        $fileName = 'CouponUsageReport_' . time();
        try {
            Maatwebsite\Excel\Facades\Excel::create($fileName, function($excel) use ($returnData) {
                        // Set the spreadsheet title, creator, and description
                        $excel->setTitle('CouponUsageReport_' . time());
                        $excel->setCreator('Laravel'); //->setCompany('WJ Gilmore, LLC');
                        $excel->setDescription('Coupon Usage Report');

                        // Build the spreadsheet, passing in the payments array
                        $excel->sheet('sheet1', function($sheet) use ($returnData) {
                            $sheet->cell('A1', function ($cell) {
                                $cell->setValue('User Name');
                            });
                            $sheet->cell('B1', function ($cell) {
                                $cell->setValue('Email');
                            });
                            $sheet->cell('C1', function ($cell) {
                                $cell->setValue('Organization');
                            });
                            $sheet->cell('D1', function ($cell) {
                                $cell->setValue('Plan Name');
                            });
                            $sheet->cell('E1', function ($cell) {
                                $cell->setValue('Plan Price ($)');
                            });
                            $sheet->cell('F1', function ($cell) {
                                $cell->setValue('Final Price ($)');
                            });
                            $sheet->cell('G1', function ($cell) {
                                $cell->setValue('Promo Discount ($)');
                            });
                            $sheet->cell('H1', function ($cell) {
                                $cell->setValue('Plan Status');
                            });
                            $sheet->cell('I1', function ($cell) {
                                $cell->setValue('Start Date');
                            });
                            $sheet->cell('J1', function ($cell) {
                                $cell->setValue('Expiry Date');
                            });

                            if (!empty($returnData)) {
                                foreach ($returnData as $key => $value) {
                                    $i = $key + 2;
                                    $sheet->cell('A' . $i, $value['username']);
                                    $sheet->cell('B' . $i, $value['email']);
                                    $sheet->cell('C' . $i, $value['organizations_name']);
                                    $sheet->cell('D' . $i, $value['subscription_name']);
                                    $sheet->cell('E' . $i, $value['subscription_price']);
                                    $sheet->cell('F' . $i, $value['final_price']);
                                    $sheet->cell('G' . $i, $value['promo_discount']);
                                    $sheet->cell('H' . $i, $value['status']);
                                    $sheet->cell('I' . $i, $value['activated_at']);
                                    $sheet->cell('J' . $i, $value['expire_on']);
                                }
                            }
                        });
                    })
                    ->store('xls', $path);
            return 'UsageCouponReport/' . $fileName;
        } catch (Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'fails', 'message' => $e->getMessage() . SOMETHING_WENT_WRONG]);
        }
    }

    /**
     * @author Jatin Parmar 
     * Export get all plan list
     * @param Request $request
     * @return type
     */
    public function getAllPlan() {
        try {
            $data = SubscriptionPlans::select('id', 'name')
                    ->where('status', 1)
                    ->orderBy('id', 'ASC')
                    ->get();

            return response()->json(array('status' => 200, 'message' => 'Records Found', 'data' => $data));
            die();
        } catch (\Exception $e) {
            // Rollback transaction
            \Log::info('Logger stating');
            \Log::info('Error: ' . $e->getMessage());
            \Log::info('Logger ending');
            return response()->json(['status' => 'falis', 'message' => 'SOMETHING_WENT_WRONG']);
        }
    }

}
