$code], env('LAMBDA_ACCESS_TOKEN', 'default_value')); //echo '
'; print_r($user->data->item); exit;
        //$request->session()->put('lms_user', json_encode($user->data->item));
        return view('lms.register')->with('user', $user->data->item);
    }

    public function postregister(Request $request)
    {
        $post = $request->except('_token');
        //$user = json_decode($request->session()->get('lms_user'));
        
        if(DB::table("lms_users")->where('phone', $post['phone'])->exists()) {
            return redirect('/lmsregister/' . $post['user_id'])->withError('This Phone number is already in use, Please use some other Phone number');
        }

        //print_r($user); exit;
        $post['type_of_setup'] = isset($post['type_of_setup']) ? implode(',', $post['type_of_setup']) : [];
        $post['type'] = 'lmsuser';

        //echo '
';print_r($post); exit;

        $search = ['type' => 'lmsuser', 'phone' => $post['phone']];
        $existinguser = LambdaRequest::getrequest('contact', 'contact/get_all', ['start' => 0, 'length' => 99, 'search' => json_encode($search), 'fields' => json_encode(['phone','email','user_info', 'is_verified']) ], env('LAMBDA_ACCESS_TOKEN', 'default_value'));

        if($existinguser->data->count > 0) {
            $request->session()->put('lms_user_id', $existinguser->data->items[0]->id);
            return redirect('/lmsregistersuccess?id='.$existinguser->data->items[0]->id)->withError('Sorry, User with this phone number already exists. If you have registered with this phone number, please click on verify WhatsApp Number to proceed.');
        }

        $access_token = User::where('user_id', $post['user_id'])->first()->access_token;
        unset($post['position']);
        Log::debug(print_r($post, true));
        $contact = LambdaRequest::postrequest('contact', 'contact/create', $post, $access_token);
        Log::debug(print_r($contact, true));
        if ($contact->status == 'success') {
            $contact = $contact->data->item;
            $hierarchy = LambdaRequest::getrequest('ums', 'hierarchy/get_one', ['id' => $contact->hierarchy ], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
            $hierarchy = $hierarchy->data->item;
            $contact->parents = $hierarchy->parents;
            //$contact->parents = explode('#', $hierarchy->parents);
            //$contact = Paramedics::createnew($contact);

            $params = ['authkey' => '1692179388-6c7f618f-80bd-4668-b26b-8efb1e1d9e4c',
                    'source_identifier' => 'lmsuser_registered',
                    'source_record_identifier' => 'registration_id_' . $contact->id,
                    'user_id' => $post['user_id'],
                    'contact_id' => $contact->id,
                    'lms_registrations' => "1"
                    ];
            LambdaRequest::postrequest('metric', 'metric/injest', $params, env('LAMBDA_ACCESS_TOKEN', 'default_value'));

            $item = (array)$contact;
            $data = ['user_id'          => $item['user_id'],
                    'hierarchy_id'      => $item['hierarchy'],
                    'contact_id'        => $item['id'],
                    'name'              => $item['name'],
                    'phone'             => $item['phone'],
                    'alternate_phone'   => $item['alternate_phone'],
                    'email'             => $item['email'],
                    'city'              => $item['city'],
                    'state'             => $item['state'],
                    'language'          => $item['language'],
                    'highlight_qualification' => $item['highlight_qualification'],
                    'type_of_setup'     => $item['type_of_setup'],
                    'designation'       => $item['designation'],
                    'clinic_institute_name' => $item['clinic_institute_name'],
                    'date_of_birth'     => $item['date_of_birth'],
                    'parents'           => $item['parents'],
                    
                    'rep_name'          => $item['user_info']->name,
                    'employee_code'     => $item['user_info']->employee_code,
                ];
            DB::table("lms_users")->insert($data);

            return redirect('/lmsregistersuccess?id='.$contact->id)->withSuccess('Successfully registered!!');
        } else {
            return redirect('/lmsregister/' . $post['user_id'])->withError('Some error occured, please try again later');
        }
    }

    public function registersuccess(Request $request)
    {
        $contact_id = $request->input('id', 0);
        return view('lms.success', ['contact_id' => $contact_id]);
    }

    public function allcourse($contact_id, Request $request)
    {
        // $lmsuser = LambdaRequest::getrequest('contact', 'contact/get_one', ['id' => $lms_user_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        // $request->session()->put('lmsuser', $lmsuser->data->item);
        $courses = LambdaRequest::getrequest('lms', 'courses/get_all', ['student_id' => $contact_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        $mycourses = [];
        return view('lms.courses', ['courses' => $courses->data->items, 'contact_id' => $contact_id ]);
    }

    public function coursesubscribe(Request $request)
    {
        $course_id = $request->input('id');
        $contact_id = $request->input('contact');

        $courses = LambdaRequest::postrequest('lms', 'courses/subscribe', ['id' => $course_id, 'partition' => 'rapport-crestroad', 'user_id' => $contact_id ], env('LAMBDA_ACCESS_TOKEN', 'default_value'));

        $lmsuser = LambdaRequest::getrequest('contact', 'contact/get_one', ['id' => $contact_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        $lmsuser = $lmsuser->data->item;

        $params = ['authkey' => '1692179388-6c7f618f-80bd-4668-b26b-8efb1e1d9e4c',
                    'source_identifier' => 'lmsuser_registered',
                    'source_record_identifier' => 'course_id_' . $course_id . '-' . $contact_id,
                    'user_id' => $lmsuser->user_id,
                    'contact_id' => $contact_id,
                    'lms_course_start' => "1"
                    ];
        LambdaRequest::postrequest('metric', 'metric/injest', $params, env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        return redirect('/lmslearn?id='.$course_id.'&contact='.$contact_id);
        //return redirect('/lmsmycourses?type=ongoing')->withSuccess('Successfully registered!!');
    }

    // public function mycourses(Request $request)
    // {
    //     $lmsuser = $request->session()->get('lmsuser');
    //     $courses = LambdaRequest::getrequest('lms', 'courses/subscribed', ['partition' => $lmsuser->partition, 'id' => $lmsuser->id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
    //     return view('lms.mycourses', ['courses' => $courses->data->items]);
    // }

    public function learn(Request $request)
    {
        $course_id = $request->input('id');
        $contact_id = $request->input('contact');

        $lmsuser = LambdaRequest::getrequest('contact', 'contact/get_one', ['id' => $contact_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        log::debug(print_r($lmsuser, true));

        $lmsuser = $lmsuser->data->item;
        $request->session()->put('lmsuser', $lmsuser);
        if (!isset($course_id)) {
            return redirect('/lmsmycourses?type=ongoing')->withSuccess('Successfully registered!!');
        }
        $request->session()->put('current_course_id', $course_id);
        $lessons = LambdaRequest::getrequest('lms', 'lessons/list', ['partition' => 'rapport-crestroad', 'id' => $course_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        $request->session()->put('article_count', $lessons->data->article_count + $lessons->data->quiz_count );

        return view('lms.lesson', ['lessons' => $lessons->data->lessons, 'completed_articles' => isset($lmsuser->completed_articles) ? $lmsuser->completed_articles : [], 'course' => $lessons->data->course]);
    }

    public function article(Request $request)
    {
        $article_id = $request->input('id', null);
        $type = $request->input('type', null);
        if (!isset($article_id) || !isset($type)) {
            echo 'Some Error occured!!!';
            exit;
        }
        $lmsuser = $request->session()->get('lmsuser');
        if ($type == 'article') {
            $article = LambdaRequest::getrequest('lms', 'articles_bank/get_one', ['id' => $article_id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
            return view('lms.article', ['article' => $article->data->item]);
        } elseif ($type == 'quiz') {
            $lmsuser = $request->session()->get('lmsuser');
            $quiz = LambdaRequest::getrequest('lms', 'lmsquiz/getquizinfo', ['id' => $article_id, 'contact_id' => $lmsuser->id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
            return view('lms.quiz', ['quiz' => $quiz->data->formdata, 'questions' => $quiz->data->questions]);
        }
    }

    public function articlemarkcomplete(Request $request)
    {
        $article = $request->input('article', '');
        $type = $request->input('type', 'articles');
        $lmsuser = $request->session()->get('lmsuser');
        $course_id = $request->session()->get('current_course_id');
        $lmsuser = LambdaRequest::getrequest('contact', 'contact/get_one', ['id' => $lmsuser->id], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        $lmsuser = $lmsuser->data->item;
        $completed_articles = [];
        if (isset($lmsuser->completed_articles)) {
            if(is_array($lmsuser->completed_articles)) {
                $completed_articles = $lmsuser->completed_articles;
            } else {
                $completed_articles = json_decode($lmsuser->completed_articles);
            }
        }
        $completed_articles[] = $article;
        $completed_articles = array_unique($completed_articles);

        $article_count = $request->session()->get('article_count');
        $access_token = User::where('user_id', $lmsuser->user_id )->first()->access_token;

        DB::table("lms_courses_completion")->updateOrInsert(['contact_id'=>$lmsuser->id,'course_id'=>$course_id,'article_id'=>$article],['total_articles'    => $article_count]);

        //Paramedics::where('id', $lmsuser->id)->push('lms_completed_'.$type.'.'.$course_id, $article, true);

        $lmsuser = LambdaRequest::postrequest('contact', 'contact/update', ['id' => $lmsuser->id, 'completed_articles' => $completed_articles, 'article_count' => $article_count, 'completed_article_count' => count($completed_articles) ], $access_token);
        return response()->json(['status' => 'success']);
    }

    public function lmsquizsubmit(Request $request)
    {
        $lmsuser = $request->session()->get('lmsuser');
        $post = $request->except('_token');
        if (isset($lmsuser) && !empty($lmsuser) && $lmsuser->user_id != '') {
            $finfo = LambdaRequest::postrequest('lms', 'lmsquizsubmission/submitquiz', [ 'formdata' => $post, 'username' => $lmsuser->name, 'email' => $lmsuser->email, 'phone' => $lmsuser->phone, 'quiz_id' => $post['quiz_id'], 'contact_id' => $lmsuser->id, 'partition' => 'rapport-crestroad']);
            if ($finfo->status == 'success') {
                return response()->json(['status' => 'success', 'submission' => $finfo->data->submission]);
            } else {
                return response()->json(['status' => 'failure']);
            }
        } else {
            return response()->json(['status' => 'failure']);
        }
    }

    public function generatecertificate(Request $request)
    {
        $lmsuser = $request->session()->get('lmsuser');
        $course_id = $request->session()->get('current_course_id');
        $course = LambdaRequest::getrequest('lms', 'courses/get_one', ['id' => $course_id, 'partition' => 'rapport-crestroad' ], env('LAMBDA_ACCESS_TOKEN', 'default_value'));
        $course = $course->data->item;
        //echo '
'; print_r($courses); exit;
        $output = Creation::lmscertificate($course, $lmsuser);
        $filename = $output['filename'];
        $folder = 'lmscertificate/'.$course_id.'/';

        return view('lms.downloadcertificate', ['folder' => $folder, 'filename' => $filename, 'lmsuser' => $lmsuser]);
    }
}