<?php

namespace App\Http\Controllers\Api\v1;

use Illuminate\Http\Request;
use App\Manager;
use Illuminate\Support\Facades\Hash;
use App\User;
use App\Organization;
use Illuminate\Support\Facades\Mail;
use App\Coupon;
use App\EmailTemplate;
use App\EmailQueue;
use Illuminate\Support\Facades\DB;
use App\Feedback;
use App\Employee;
use App\SubscriptionPlans;
use App\ManagerPlan;
use App\Branch;

/**
 * ManagerController Class Doc Comment
 *
 * @category Class
 * @package  Api
 * @author   Ketan Patel - ketan.patel@brainvire.com
 *
 */
class ManagerController extends Controller {

    public function __construct() {
        //$this->middleware('oauth', ['except' => ['index']]);
        //$this->middleware('auth:api', ['except' => ['index']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        $branches = Manager::all();

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

    /**
     * Get the specified resource from storage.
     *
     * @param  int $rid
     * @return \Illuminate\Http\Response
     */
    public function show($rid) {
        $branch = Manager::find($rid);
        if (count($branch) > 0) {
            return response()->json($branch);
        } else {
            return response()->json(['status' => 'fail', 'message' => RECORD_NOT_FOUND]);
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {

        $this->validate($request, [
            'planName' => 'required',
            'name' => 'required',
            // 'email' => 'required|email|unique:users,email|unique:feedback,email',
            'email' => 'required|email',
//            'organization_pic' => 'image|mimes:jpeg,jpg,png|max:2000',
            'password' => 'required',
            'mobile' => 'required',
            'orgname' => 'required|unique:organizations,name',
        ]);
        
        $chkUser = User::select('id')->where('email',$request->email)->where('role','ROLE_MANAGER')->first();

        if ($chkUser) {
            return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        }
        
        // $customer = Feedback::where('email',$request->email)->count();

        // if($customer > 0)
        // {
        //     return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        // }

        
        $user = new User();
//        $orgImage         = $request->files->get('organization_pic');
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = Hash::make($request->password);
        $user->mobile = $request->mobile;
        $user->role = 'ROLE_MANAGER';
        $user->plan_id = $request->planName;
        $date = new \DateTime();
        $ddf = $date->format('Y-m-d');
        $user->created_at = $ddf;
        $user->passcode = mt_rand(10000000, 99999999);
        $helperobj = new \App\CommonHelper();

        if ($user->save()) {
            $lastInsertId = $user->id;

            // creating new organization record
            $organization = new Organization();
            $organization->name = $request->orgname;
            $organization->user_id = $lastInsertId;
//            if ($orgImage) {
//                $orgFileName = time() . '.' . $orgImage->getClientOriginalExtension();
//                $organization->organization_pic = $orgFileName;
//            }

            if ($organization->save()) {
                $lastOrgId = $organization->id;
//                if ($orgImage) {
//                    if (!file_exists('orgLogo')) {
//                        mkdir('orgLogo');
//                    }
//                    $destinationPath = 'orgLogo' . '/' . $lastOrgId;
//                    $orgImage->move($destinationPath, $orgFileName);
//                }
                // creating new record in manager table
                $manager = new Manager();
                $manager->user_id = $lastInsertId;
                $manager->organization_id = $lastOrgId;

                $helperObj = new \App\CommonHelper();
                $pubkey = $helperObj->stripeConfiguration();

                $mngrStripeId = $this->createStripeCustomer($user->email);
                if ($mngrStripeId) {
                    $manager->stripe_cust_id = $mngrStripeId;
                }
                if ($request->input('isHippa') == true) {
                    $manager->isHippa = '1';
                }
                if ($manager->save()) {
                    $body = EmailTemplate::where('slug', 'MANAGER_REGISTRATION')->first();
                    $userName = $request->name;
                    $userEmail = $request->email;
                    $passcode = $user->passcode;
                    if (!empty($body)) {
                        $organization = Organization::find($lastOrgId);
                        if ($organization) {
                            if ($organization->organization_pic) {
                                $docUrl = $helperobj->publicPath();

                                if($organization->organization_pic != "")
                                {
                                    $image = $docUrl . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                                    if (!file_exists($image)) {
                                        $image = ANGULARURL . 'assets/img/PU-logo.png';
                                    } else {
                                        $image = url() . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                                    }

                                }
                                else
                                {
                                    $image = ANGULARURL . 'assets/img/PU-logo.png';
                                }
                                
                            } else {
                                $image = ANGULARURL . 'assets/img/PU-logo.png';
                            }
                        } else {
                            $image = ANGULARURL . 'assets/img/PU-logo.png';
                        }
                        $tmp1 = str_replace("##USER_NAME##", $userName, $body['description']);
                        $tmp2 = str_replace("##PASSCODE##", $passcode, $tmp1);
                        $tmp3 = str_replace("##LOGO##", $image, $tmp2);
                        $tmp4 = str_replace("##YEAR##", date('Y'), $tmp3);
                        $data['html'] = str_replace("##GETTING_STARTED_LINK##", GETTING_STARTED_LINK, $tmp4);
                        $subject = str_replace("##USER_NAME##", $organization->name, $body['subject']);

                        $emailQueue = new EmailQueue();
                        $emailQueue->type = TYPE_REGISTER;
                        $emailQueue->mail_subject = $subject;
                        $emailQueue->mail_to = $userEmail;
                        $emailQueue->mail_from = FROM_IN_MAIL;
                        $emailQueue->mail_body = $data['html'];
                        $emailQueue->is_send = 0;
                        $date = new \DateTime();
                        $ddf = $date->format('Y-m-d H:i:s');
                        $emailQueue->created = $ddf;
                        $emailQueue->save();
                    }
                    
                    /*-------- send SMS -------*/
                    $mobileImg = ANGULARURL.'assets/img/PU-SMS-logo_new.png';
                    
                    $data['type'] = 'feedback';
                    $data['to'] = $request->mobile;
                    $data['msgBody'] = "Thank you for signing up with INCITE REVIEWS. We're very excited to announce that INCITE REVIEWS is ready for you to explore! Your passcode is: ".$passcode.' Please follow below link to get you started: '.GETTING_STARTED_LINK;
                    $data['media'] = $mobileImg;
                    $smsResult = $helperobj->sendSMS($data);
                    return response()->json(['status' => 'success', 'message' => ACC_CREATED, 'id' => $mngrStripeId, 'userId' => $lastInsertId]);
                } else {
                    Organization::destroy($lastOrgId);
                    User::destroy($lastInsertId);
                    return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
                }
            } else {
                User::destroy($lastInsertId);
                return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
            }
        } else {
            return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @param int                      $rid
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $rid) {
        
        $this->validate($request, [
            'name' => 'required',
            // 'email' => 'required|unique:feedback,email|unique:users,email,' . $rid,
            'email' => 'required|email',
            'mobile' => 'required',
            'status' => 'required',
        ]);
        
        //check User Exist
        $chkUser = User::select('id')->where('email',$request->email)->where('role','ROLE_MANAGER')->where('id','!=',$rid)->first();

        if ($chkUser) {
            return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        }

        if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
            $location = json_decode($request->location);

            foreach ($location as $key => $value) {
                /** Check for unique sycle clinic id */
                $BranchData = Branch::where('sycle_clinic_id', $value->sycle_clinic_id)->first();
                if(!empty($BranchData)) {
                    if($value->id == '') {
                        return response()->json(['status' => 'fail', 'message' => 'Clinic Id must be unique']);
                    }
                    $org = Organization::select('id')->where('user_id',$rid)->first();
                    if($BranchData->organization_id !== $org->id) {
                        return response()->json(['status' => 'fail', 'message' => 'Clinic Id must be unique']);
                    }
                }
            }
        }

        // //customer
        // $customer = Feedback::where('email',$request->email)->count();

        // if($customer > 0)
        // {
        //     return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        // }

        $manager = User::find($rid);
        if (!$manager) {
            return response()->json(['status' => 'fail', 'message' => RECORD_NOT_FOUND]);
        }
        if ($manager->email != $request->email) {
            $helperObj = new \App\CommonHelper();
            $pubkey = $helperObj->stripeConfiguration();
            $this->updateStripeCustomer($request->email, $request->stripe_cust_id);
        }
        $manager->name = $request->name;
        $manager->email = $request->email;

        if ($request->password != '') {
            $manager->password = Hash::make($request->password);
        }

        if ($request->status == 1) {
            $manager->fail_attempt = 0 ;
        }

        $manager->mobile = $request->mobile;
        $manager->status = $request->status;
        $date = new \DateTime();
        $ddf = $date->format('Y-m-d H:i:s');
        $manager->updated_at = $ddf;

        if($request->has('is_auto_renew') ) {
            $manager->is_auto_renew = $request->is_auto_renew;
        }
        
        if ($manager->save()) {
            $org = Organization::select('id')->where('user_id',$rid)->first();
            if($request->status == 0 || $request->status == 2)
            {
                $employee = Employee::where('organization_id',$org->id)->select('user_id')->get();
                 if(count($employee) > 0){

                    foreach ($employee as $key => $value) {
                        
                        $login_data = DB::table('oauth_access_tokens')->where('user_id',$value->user_id)->first();

                        if($login_data)
                        {
                            DB::table('oauth_access_tokens')
                                        ->where('user_id', $value->user_id)
                                        ->update([
                                        'revoked' => '1',
                                        'expires_at' => Carbon::now()->subDays(400),
                                        ]);

                        }
                    }
                    
                 }

            }

            //Is sycle user Logic starts from here
            if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
                
                $is_sycle_profile = $request->is_sycle_profile;
                $location = json_decode($request->location);

                foreach ($location as $key => $value) {

                    $branch                  = new Branch();
                    if($value->id != '') {
                        $branchInfo = Branch::find($value->id);                        
                        $branchInfo->name            = $value->name;
                        $branchInfo->organization_id = $org->id;
                        $branchInfo->place_value     = $value->place_id;
                        $branchInfo->sycle_clinic_id = $value->sycle_clinic_id;
                        $date                    = new \DateTime();
                        $ddf                     = $date->format('Y-m-d');                
                        $branchInfo->updated         = $ddf;
                        $branchInfo->save();
                    } else {
                        $branch->name            = $value->name;
                        $branch->organization_id = $org->id;
                        $branch->place_value     = $value->place_id;
                        $branch->sycle_clinic_id = $value->sycle_clinic_id;
                        $date                    = new \DateTime();
                        $ddf                     = $date->format('Y-m-d');                
                        $branch->created         = $ddf;
                        $branch->save();
                    }
                    

                }
                
            }

            if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
                $plan = $request->plan;

                $mangerPlan = ManagerPlan::select('*')->where('manager_id',$rid)->first();          
                $date                        = new \DateTime();
                $mangerPlan->expire_on       = $request->expire_on;
                $mangerPlan->updated_at      = $date;
                $mangerPlan->save();

                //Update into employee tbl

                $employeeTbl = Employee::where('organization_id',$org->id)->select('*')->get();

                if(count($employeeTbl) > 0){

                    foreach ($employeeTbl as $key => $value) {
                        $date                        = new \DateTime();
                        DB::table('employees')
                            ->where('organization_id', $org->id)
                            ->update([
                            'plan_expired' => $request->expire_on,
                            'updated' => $date,
                        ]);

                    }
                }
            }
            /* ---- Subadmin activity log --- */
            $subAdminName = $request->subAdminName;
            $subAdminId = $request->subAdminId;
            $logdata = [];
            $logdata['adminName'] = $subAdminName;
            $logdata['adminUserId'] = $subAdminId;
            $logdata['type'] = 'business';
            $logdata['description'] = "Sub Admin $subAdminName has updated business $manager->name record";
            $this->logActivity($logdata);

            return response()->json(['status' => 'success', 'message' => MANAGER_UPDATED]);
        } else {
            return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
        }
    }

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

    /**
     * Send SMS and Email.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function sendSmsAndMail(Request $request) {
        $feedback = Feedback::find($request->feedback_id);
        $user = User::find($request->user_id);
        $objCoupon = Coupon::where('user_id', $request->user_id)->get()->where('is_send', 0)->first();

        $data['type'] = 'coupon';
        $data['to'] = $feedback->mobile;

        if (is_object($objCoupon)) {
            $couponCode = $objCoupon->code;
            $couponDesc = $objCoupon->description;
            $email = $feedback->email;

            $body = EmailTemplate::where('slug', 'COUPON_CODE')->first();

            if (!empty($body)) {
                $organization = Organization::where('user_id', $user->id)->first();
                if ($organization) {
                    $helperobj = new \App\CommonHelper();
                    $docUrl = $helperobj->publicPath();

                    if($organization->organization_pic != "")
                    {
                            $image = $docUrl . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                            $mobileImg = $image;
                            if (!file_exists($image)) {
                                $image = ANGULARURL . PU_LOGO;
                                $mobileImg = ANGULARURL.'assets/img/PU-SMS-logo_new.png';
                            } else {
                                $image = url() . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                                $mobileImg = $image;
                            }

                    }
                    else
                    {
                                $image = ANGULARURL . PU_LOGO;
                                $mobileImg = ANGULARURL.'assets/img/PU-SMS-logo_new.png';

                    }
                   
                } else {
                    $image = ANGULARURL . PU_LOGO;
                    $mobileImg = ANGULARURL.'assets/img/PU-SMS-logo_new.png';
                }
                $tmp1 = str_replace("##USER_NAME##", $user->name, $body['description']);
                $tmp2 = str_replace("##SUPPORT_LINK##", SUPPORT_LINK, $tmp1);
                $tmp3 = str_replace("##LOGO##", $image, $tmp2);
                $tmp4 = str_replace("##COUPON_DESC##", $couponDesc, $tmp3);
                $tmp5 = str_replace("##YEAR##", date('Y'), $tmp4);
                $data['html'] = str_replace("##COUPON_CODE##", $couponCode, $tmp5);
                $subject = str_replace("##USER_NAME##", $organization->name, $body['subject']);
                $emailQueue = new EmailQueue();
                $emailQueue->type = TYPE_SENDSMSLINK;
                $emailQueue->mail_subject = $subject;
                $emailQueue->mail_to = $email;
                $emailQueue->mail_from = FROM_IN_MAIL;
                $emailQueue->mail_body = $data['html'];
                $emailQueue->is_send = 0;
                $date = new \DateTime();
                $ddf = $date->format('Y-m-d H:i:s');
                $emailQueue->created = $ddf;
                $emailQueue->save();
            }

            $objCoupon->is_send = 1;
            $objCoupon->save();

            //$feedback->is_queue = 1;
            ///$feedback->save();

            $data['html'] = 'Hello ' . $user->name . ', ' . 'Your coupon code is ' . $couponCode . ' ' . $couponDesc . '.';
            $data['media'] = $mobileImg;
            $hobj = new \App\CommonHelper();
            $smsResult = $hobj->sendSMS($data);

            if (empty($smsResult)) {
                return response()->json(['status' => 'success', 'message' => SEND_MAIL]);
            } else {
                $errorMsg = (isset($smsResult['message'])) ? $smsResult['message'] : 'Something went wrong!';
                return response()->json(['status' => 'fail', 'message' => $errorMsg]);
            }
        } else {
            return response()->json(['status' => 'fail', 'message' => NO_COUPON]);
        }
    }

    public function createStripeCustomer($email = '') {
        // return 0;
        if ($email) {
            try {
                $customerEmail = $email;
                $customer = \Stripe\Customer::create(array(
                            "email" => $customerEmail
                ));
                $managerStripId = $customer->id;
                return $managerStripId;

                // Plan has created, no exceptions were thrown or otherwise caught
                //$error = "success";
            } catch (\Stripe\Error\Card $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\InvalidRequest $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\Authentication $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\ApiConnection $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\Base $e) {
                $error = $e->getMessage();
            } catch (Exception $e) {
                $error = $e->getMessage();
            }
            return false;
        }
    }

    /**
     * Display a listing of the plan.
     *
     * @return \Illuminate\Http\Response
     */
    public function getPlan() {
        $plans = DB::table('subscription_plans')->where('status', '=', 1)->where('is_free_plan', '=', 0)->orderBy('id', 'desc')->get();
        return response()->json($plans);
    }

    /**
     * Display a stripe plan id.
     *
     * @return \Illuminate\Http\Response
     */
    public function getStripeId(Request $request) {
        $manager = Manager::where('user_id', $request->manager_id)->first();
        $stripeId = $manager ? $manager->stripe_cust_id : 'Not stripe customer';
        return $stripeId;
    }

    /**
     * Get fb verification.
     *
     * @return \Illuminate\Http\Response
     */
    public function getFbVerified(Request $request) {
        $manager = Manager::where('user_id', $request->manager_id)->first();
        $fbToken = $manager ? $manager->facebook_token : '';
        $fbPageToken = $manager ? $manager->fb_page_token : '';

        return response()->json(['fbToken' => $fbToken ? 'yes' : 'no', 'fbPageToken' => $fbPageToken ? 'yes' : 'no']);
    }

    /**
     * Get twitter verification.
     *
     * @return \Illuminate\Http\Response
     */
    public function getTwitterVerified(Request $request) {
        $manager = Manager::where('user_id', $request->manager_id)->first();
        $twitterToken = 'no';
        if ($manager) {
            if ($manager->twitter_consumer_key == null || $manager->twitter_consumer_secret == null || $manager->twitter_access_token == null || $manager->twitter_access_token_secret == null) {
                $twitterToken = 'no';
            } else {
                $twitterToken = 'yes';
            }
        }
        return response()->json(['twitterToken' => $twitterToken, 'status' => 'success',]);
    }

    /**
     * Get manager list.
     *
     * @return \Illuminate\Http\Response
     */
    public function getManager() {
        $users = DB::table('managers as m')
                ->select('u.id as id', 'm.organization_id as orgId', 'u.name as name')
                ->leftJoin('users as u', 'u.id', '=', 'm.user_id')
                ->Where('u.role', '=', 'ROLE_MANAGER')
                ->orderBy('m.id', 'desc')
                ->get();
        return response()->json($users);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function addBusiness(Request $request) {
        
        $this->validate($request, [
            'name' => 'required',
            // 'email' => 'required|email|unique:users,email|unique:feedback,email',
            'email' => 'required|email',
            'organization_pic' => 'image|mimes:jpeg,jpg,png|max:2000',
            'password' => 'required',
            'mobile' => 'required',
            'orgname' => 'required|unique:organizations,name',
            'status' => 'required'
        ]);
        
        //check User Exist
        $chkUser = User::select('id')->where('email',$request->email)->where('role','ROLE_MANAGER')->first();

        if ($chkUser) {
            return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        }

        if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
            $location = json_decode($request->location);

            foreach ($location as $key => $value) {
                /** Check for unique sycle clinic id */
                $BranchInfo = Branch::where('sycle_clinic_id', $value->sycle_clinic_id)->first();
                if(!empty($BranchInfo)) {
                    return response()->json(['status' => 'fail', 'message' => 'Clinic Id must be unique']);
                }
            }
        }

        //  //customer
        // $customer = Feedback::where('email',$request->email)->count();

        // if($customer > 0)
        // {
        //     return response()->json(['status' => 'fail', 'message' => EMAIL_EXIST]);
        // }


        $user = new User();
        //$image          = $request->files->get('profile_pic');
        $orgImage = $request->files->get('organization_pic');
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = Hash::make($request->password);
        $user->mobile = $request->mobile;
        $user->role = 'ROLE_MANAGER';
        $user->passcode = mt_rand(10000000, 99999999);
        $user->status = $request->status;
        $date = new \DateTime();
        $ddf = $date->format('Y-m-d');
        $user->created_at = $ddf;
        $user->is_sycle_profile = 0;
        $user->is_auto_renew = 0;
        $user->first_login = 0;

        if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
            $user->is_sycle_profile = $request->is_sycle_profile;
            $user->is_auto_renew = $request->is_auto_renew;
            $user->plan = $request->plan;
            $user->plan_id = $request->plan;
        }

        if ($user->save()) {
            $lastInsertId = $user->id;
            // creating new organization record
            $organization = new Organization();
            $organization->name = $request->orgname;
            $organization->user_id = $lastInsertId;
            if ($orgImage) {
                $orgFileName = time() . '.' . $orgImage->getClientOriginalExtension();
                $organization->organization_pic = $orgFileName;
            }

            if ($organization->save()) {
                $lastOrgId = $organization->id;
                if ($orgImage) {
                    if (!file_exists('orgLogo')) {
                        mkdir('orgLogo');
                    }
                    $destinationPath = 'orgLogo' . '/' . $lastOrgId;
                    $orgImage->move($destinationPath, $orgFileName);
                }

                // creating new record in manager table
                $manager = new Manager();
                $manager->user_id = $lastInsertId;
                $manager->organization_id = $lastOrgId;

                $helperObj = new \App\CommonHelper();
                $pubkey = $helperObj->stripeConfiguration();
                $mngrStripeId = $this->createStripeCustomer($user->email);
                if ($mngrStripeId) {
                    $manager->stripe_cust_id = $mngrStripeId;
                }

                if ($manager->save()) {
                    $lastManagerId = $manager->id;
                    //Is sycle user Logic starts from here
                    if($request->has('is_sycle_profile') && $request->is_sycle_profile  == 1) {
                        
                        $is_sycle_profile = $request->is_sycle_profile;
                        $user->is_sycle_profile = $is_sycle_profile;
                        $location = json_decode($request->location);

                        foreach ($location as $key => $value) {

                            $branch                  = new Branch();
                            $branch->name            = $value->name;
                            $branch->organization_id = $lastOrgId;
                            $branch->place_value     = $value->location;
                            $branch->sycle_clinic_id = $value->sycle_clinic_id;
                            $date                    = new \DateTime();
                            $ddf                     = $date->format('Y-m-d');                
                            $branch->created         = $ddf;
                            $branch->save();

                        }
                        
                    }

                    if($request->has('is_sycle_profile') && $request->is_sycle_profile == 1) {
                        $plan = $request->plan;

                        $planInfo = SubscriptionPlans::find($plan);

                        $mangerPlan             = new ManagerPlan();
                        $mangerPlan->manager_id = $lastInsertId;
                        $mangerPlan->plan_id    = $plan;
                        $mangerPlan->plan_price      = $planInfo ? $planInfo->price : '';
                        $mangerPlan->final_price   = $planInfo->price;
                        // $planPrice = $objPlan->price - $discAmount;
                        // $mangerPlan->promo_discount   = $discAmount;
                        $mangerPlan->promo_discount   = 0.00;
                        $mangerPlan->status = 'current';
                        $mangerPlan->no_of_used_users = 0;
                        $mangerPlan->coupon_id        = null;
                        $mangerPlan->subscription_id = null; //NTA
                        $mangerPlan->invoice_id = null;
                        $mangerPlan->stripe_webhook_response = null;
                        
                        $date                        = new \DateTime();
                        $mangerPlan->activated_at    = $date;
                        $mangerPlan->created_at      = $date->format('Y-m-d H:i:s');
                        // $mangerPlan->expire_on       = date('Y-m-d', strtotime('+1 year'));
                        $mangerPlan->expire_on = $helperObj->getPlanExpiryDate($plan, $mode = 'new');
                        $mangerPlan->updated_at      = $date;
                        $mangerPlan->save();
                    }

                    $body = EmailTemplate::where('slug', 'ADMIN_MANAGER_REGISTRATION')->first();

                    $userName = $request->name;
                    $userEmail = $request->email;
                    $passcode = $user->passcode;
                    $password = $request->password;

                    if (!empty($body)) {

                        $organization = Organization::find($lastOrgId);

                        if ($organization) {
                            if ($organization->organization_pic) {
                                $docUrl = $helperObj->publicPath();

                                if($organization->organization_pic != "")
                                {
                                    $image = $docUrl . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                                    if (!file_exists($image)) {
                                        $image = ANGULARURL . 'assets/img/PU-logo.png';
                                    } else {
                                        $image = url() . '/orgLogo/' . $organization->id . '/' . $organization->organization_pic;
                                    }

                                }
                                else
                                {
                                    $image = ANGULARURL . 'assets/img/PU-logo.png';
                                }
                                
                            } else {
                                $image = ANGULARURL . 'assets/img/PU-logo.png';
                            }
                        } else {
                            $image = ANGULARURL . 'assets/img/PU-logo.png';
                        }


                        $tmp1 = str_replace("##USER_NAME##", $userName, $body['description']);
                        $tmp2 = str_replace("##PASSCODE##", $passcode, $tmp1);
                        $tmp3 = str_replace("##LOGO##", $image, $tmp2);
                        $tmp4 = str_replace("##YEAR##", date('Y'), $tmp3);
                        $tmp5 = str_replace("##PASSWORD##", $password, $tmp4);
                        $tmp6 = str_replace("##EMAIL##", $userEmail, $tmp5);

                        $data['html'] = str_replace("##GETTING_STARTED_LINK##", GETTING_STARTED_LINK, $tmp6);
                        $subject = str_replace("##USER_NAME##", $organization->name, $body['subject']);

                        $emailQueue = new EmailQueue();
                        $emailQueue->type = TYPE_REGISTER;
                        $emailQueue->mail_subject = $subject;
                        $emailQueue->mail_to = $userEmail;
                        $emailQueue->mail_from = FROM_IN_MAIL;
                        $emailQueue->mail_body = $data['html'];
                        $emailQueue->is_send = 0;
                        $date = new \DateTime();
                        $ddf = $date->format('Y-m-d H:i:s');
                        $emailQueue->created = $ddf;
                        $emailQueue->save();

                    }

                     /*-------- send SMS -------*/
                    $mobileImg = ANGULARURL.'assets/img/PU-SMS-logo_new.png';

                    $data['type'] = 'feedback';
                    $data['to'] = $request->mobile;
                    $data['msgBody'] = "Thank you for signing up with INCITE REVIEWS. We're very excited to announce that INCITE REVIEWS is ready for you to explore! Your passcode is: ".$passcode.' Please follow below link to get you started: '.GETTING_STARTED_LINK;
                    $data['media'] = $mobileImg;
                    $smsResult = $helperObj->sendSMS($data);


                    return response()->json(['status' => 'success', 'message' => ACC_CREATED, 'id' => $mngrStripeId, 'userId' => $lastInsertId]);
                } else {
                    Organization::destroy($lastOrgId);
                    User::destroy($lastInsertId);
                    return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
                }                

            } else {
                User::destroy($lastInsertId);
                return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
            }

        } else {
            return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
        }
    }

    public function updateStripeCustomer($email = '', $stripeCustId) {

        if ($email) {
            try {
                $customer = \Stripe\Customer::retrieve($stripeCustId);
                $customer->email = $email;
                $customer->save();
                return TRUE;
            } catch (\Stripe\Error\Card $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\InvalidRequest $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\Authentication $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\ApiConnection $e) {
                $error = $e->getMessage();
            } catch (\Stripe\Error\Base $e) {
                $error = $e->getMessage();
            } catch (Exception $e) {
                $error = $e->getMessage();
            }
            return false;
        }
    }

    /**
     * Get instagram verification.
     *
     * @return \Illuminate\Http\Response
     */
    public function getInstaVerified(Request $request) {
        $manager = Manager::where('user_id', $request->manager_id)->first();
        $instagramToken = 'no';
        if ($manager) {
            if ($manager->insta_username == null || $manager->insta_password == null) {
                $instagramToken = 'no';
            } else {
                $instagramToken = 'yes';
            }
        }
        return response()->json(['instagramToken' => $instagramToken, 'status' => 'success',]);
    }

    public function getInstaData(Request $request) {
        $userId = $request->user_id;
        $manager = Manager::where('user_id', $userId)->first();
        $helperObj = new \App\CommonHelper();

        $data = [];
        $data['instaUsername'] = $manager->insta_username ? $manager->insta_username : '';
        $data['instaPwd'] = $manager->insta_password ? $helperObj->decrypt($manager->insta_password) : '';
        $data['fbClientId'] = $manager->client_id ? $manager->client_id  : '';
        $data['fbSecret'] = $manager->client_secret  ? $manager->client_secret  : '';
        $data['reviewId'] = $manager->review_identifier ? $manager->review_identifier : '';
        $data['consumerId'] = $manager->twitter_consumer_key ? $manager->twitter_consumer_key : '';
        $data['secretId'] = $manager->twitter_consumer_secret ? $manager->twitter_consumer_secret : '';
        $data['tokenId'] = $manager->twitter_access_token ? $manager->twitter_access_token : '';
        $data['tokenSecretId'] = $manager->twitter_access_token_secret ? $manager->twitter_access_token_secret : '';
        return response()->json(['data' => $data]);
    }

}
