<?php

namespace App\Http\Controllers\Api\v2;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Exceptions\GeneralException;
use App\Http\Controllers\Controller;
use App\Repository\Auth\UserRepository;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Hash;

use App\Http\Controllers\API\BaseController as BaseController;
use App\Models\Questions;
use App\Models\Answers;
use App\Models\UserCalender;
use App\Models\UserCalenderPhase;
use App\Models\UserQuestionAnswer;
use App\Models\Category;
use App\Models\Symptom;
use App\Models\Phase;
use App\Models\CategorySymptom;
use App\Models\Auth\User;
use Validator;
use Carbon\Carbon;


class ApiQuestionController extends Controller
{
    protected $userRepository;


    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    public function getQuestionnaireOptions(Request $request)
    {

        $response = array();
        $output = array();

        $questions['question'] = Questions::select('id', 'questions')->get();


        if(count($questions['question'])>0)
        {
            foreach ($questions['question'] as $key => $value) 
            {

                $questions['question'][$key]['options'] = Answers::select('id', 'ques_id', 'answers')->where('ques_id', $value->id)->get();                     
            }

            $status = 200;
            $statusCode = 200;
            $message = "All Questions And Answers";
            $output = $questions;
        }
        else
        {
            $status = 201;
            $statusCode = 201;
            $message = "No Questions Available";
        }



        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);

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

    }

    public function questionnaire(Request $request)
    {
        $response = array();
        $output = array();

        $inputs = $request->all();
        $inputs = getTrimmedValue($inputs);

        $user_id = trim($request->input('user_id'));
        $name = trim($request->input('name'));
        $dob = trim(date('Y-m-d', strtotime($request->dob)));
        $firstDayLastPeriod = trim(date('Y-m-d', strtotime($request->firstDayLastPeriod)));
        $duration = trim($request->durationLastPeriod);
        $questions = trim($request->input('question_id'));
        $answers = trim($request->input('answer_id'));
        $others = trim($request->input('others_answer'));
        $phase = 4;
        $totalDays = 28;
        $question_id = explode(',', $questions);
        $answer_id = explode(',', $answers);
        $one = 1;
        $tdate = $totalDays - $one;
        $nowDate = date('Y-m-d'); 
        $check_dur = $duration-$one;
        $checking_date = date('Y-m-d', strtotime($firstDayLastPeriod. ' + '.$check_dur.' days'));

        if($user_id && $name && $dob && $firstDayLastPeriod && $duration && $question_id && $answer_id)
        {
            $user_calender_exist = UserCalender::where('user_id', $user_id)->orderBy('sdate', 'desc')->get();
            $userStatus = User::find($user_id);
            $edate = date('Y-m-d', strtotime($firstDayLastPeriod. ' + '.$tdate.' days'));

            $e_date   = Carbon::parse($edate);
            $current_date = Carbon::parse($nowDate);
            $diff_day     = $current_date->diffInDays($e_date);
            if(count($user_calender_exist)>0)
            {            

                $user_calender_delete = UserCalender::where('user_id', $user_id)->delete();

                if($userStatus->questionneres == 0)
                {
                    foreach ($answer_id as $key => $value) 
                    {
                        $answer = Answers::find($value);

                        if($answer->answers == 'Others')
                        {
                            $insert = UserQuestionAnswer::insert([
                                'user_id' => $user_id,
                                'question_id' => $answer->ques_id,
                                'answer_id' => $value,
                                'answer' => $others
                            ]);
                        }
                        else
                        {
                            $insert = UserQuestionAnswer::insert([
                                'user_id' => $user_id,
                                'question_id' => $answer->ques_id,
                                'answer_id' => $value,
                                'answer' => $answer->answers
                            ]);    
                        }    
                    }

                    if($insert)
                    {
                        $update_arr = [
                            'questionneres'   => true,
                            'name'            => $name,
                            'dob'             => $dob
                        ];
                        $user_upd = $this->userRepository->updateByCondition(array('id'=>$user_id), $update_arr);

                        if($diff_day <= 15 || $e_date < $current_date)
                        {
                            if($e_date < $current_date)
                            {
                                $new_e_date = 15+$diff_day;
                                $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days')); 
                            }
                            else
                            {
                                $new_e_date = 15-$diff_day;
                                $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days'));    
                            }
                            $totalDays = $totalDays + $new_e_date;
                            
                            if($checking_date >= $nowDate)
                            {
                                $calender = UserCalender::insert([
                                    'user_id' => $user_id,
                                    'sdate'   => $firstDayLastPeriod,
                                    'edate'   => $edate,
                                    'duration'=> $totalDays,
                                    'status'  => 1
                                ]);
                            }
                            else
                            {
                                $calender = UserCalender::insert([
                                    'user_id' => $user_id,
                                    'sdate'   => $firstDayLastPeriod,
                                    'edate'   => $edate,
                                    'duration'=> $totalDays,
                                    'status'  => 0
                                ]);
                            }

                            if($calender)
                            {
                                $userCalender = UserCalender::where('user_id',$user_id)->first();

                                if($totalDays < 21)
                                {
                                    $p = Phase::where('duration', 21)->first();   
                                    $q = Phase::where('duration', 21)->count();   
                                }
                                elseif($totalDays > 35)
                                {
                                    $p = Phase::where('duration', 35)->first();    
                                    $q = Phase::where('duration', 35)->count();    
                                }
                                else
                                {
                                    $p = Phase::where('duration', $totalDays)->first(); 
                                    $q = Phase::where('duration', $totalDays)->count(); 
                                }
                                if($q > 0)
                                {

                                    $phase_1 = $duration-$one;
                                    $phase_2 = $p->phase_two;
                                    $phase_3 = $p->phase_three;
                                    $last_phase = ($totalDays - ($duration + $phase_2 + $phase_3));


                                    for($i=0; $i<$phase;$i++)
                                    {

                                        if($i == 0) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($firstDayLastPeriod));
                                            $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                            $phase_color = 'clear';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$duration,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 1) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                            $phase_color = 'yellow';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_2,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 2) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                            $phase_color = 'orange';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_3,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }
                                        else 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                            $phase_color = 'red';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$last_phase,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }

                                        if($instCalenderPhase)
                                        {
                                            $user_answer = UserQuestionAnswer::select('id','user_id', 'question_id', 'answer_id', 'answer')->where('user_id', $user_id)->get();

                                            $status = 200;
                                            $statusCode = 200;
                                            $message = "Data Insert Successful";


                                            $userDetails = User::find($user_id);
                                            $calender = UserCalender::where('user_id', $user_id)->orderBy('id','DESC')->first();

                                            $output['id'] = $userDetails->id??'';
                                            $output['name'] = $userDetails->name??'';
                                            $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                            $output['email'] = $userDetails->email??'';
                                            $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                            $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                            $output['device_token'] = $userDetails->device_token??'';
                                            $output['device_type'] = $userDetails->device_type??'';
                                            $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                            $output['mobile_number'] = $userDetails->mobile_number??'';
                                            $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                            $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                            $output['status'] = $userDetails->status??'';
                                            $output['login_type'] = $userDetails->login_type??'';
                                            $output['email_verify'] = $userDetails->email_verify??'';
                                            $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                            $output['questionneres'] = $userDetails->questionneres??'';
                                            $output['session_token'] = $userDetails->session_token??'';
                                            $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                            $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                            $output['user_calender_status'] = $calender->status??'';
                                            $output['inputs'] = $inputs??(object)[];
                                        }
                                        else
                                        {
                                            $status = 201;
                                            $statusCode = 201;
                                            $message = "Calender Phase Data Not Intersed";
                                        }

                                    }

                                }
                                else
                                {
                                    $status = 201;
                                    $statusCode = 201;
                                    $message = "No Data Found";
                                }
                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "Calender Data Not Intersed";
                            }
                        }
                        else
                        {
                            if($checking_date >= $nowDate)
                            {
                                $calender = UserCalender::insert([
                                'user_id' => $user_id,
                                'sdate'   => $firstDayLastPeriod,
                                'edate'   => $edate,
                                'duration'=> $totalDays,
                                'status'  => 1
                                ]);
                            }
                            else
                            {
                                $calender = UserCalender::insert([
                                'user_id' => $user_id,
                                'sdate'   => $firstDayLastPeriod,
                                'edate'   => $edate,
                                'duration'=> $totalDays,
                                'status'  => 0
                                ]);    
                            }
                            

                            if($calender)
                            {
                                $userCalender = UserCalender::where('user_id',$user_id)->first();

                                if($totalDays < 21)
                                {
                                    $p = Phase::where('duration', 21)->first();   
                                    $q = Phase::where('duration', 21)->count();   
                                }
                                elseif($totalDays > 35)
                                {
                                    $p = Phase::where('duration', 35)->first();    
                                    $q = Phase::where('duration', 35)->count();    
                                }
                                else
                                {
                                    $p = Phase::where('duration', $totalDays)->first(); 
                                    $q = Phase::where('duration', $totalDays)->count(); 
                                }
                                if($q > 0)
                                {

                                    $phase_1 = $duration-$one;
                                    $phase_2 = $p->phase_two;
                                    $phase_3 = $p->phase_three;
                                    $last_phase = ($totalDays - ($duration + $phase_2 + $phase_3));


                                    for($i=0; $i<$phase;$i++)
                                    {

                                        if($i == 0) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($firstDayLastPeriod));
                                            $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                            $phase_color = 'clear';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$duration,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 1) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                            $phase_color = 'yellow';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_2,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 2) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                            $phase_color = 'orange';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_3,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }
                                        else 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                            $phase_color = 'red';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$userCalender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$last_phase,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }

                                        if($instCalenderPhase)
                                        {
                                            $user_answer = UserQuestionAnswer::select('id','user_id', 'question_id', 'answer_id', 'answer')->where('user_id', $user_id)->get();

                                            $status = 200;
                                            $statusCode = 200;
                                            $message = "Data Insert Successful";



                                            $userDetails = User::find($user_id);
                                            $calender = UserCalender::where('user_id', $user_id)->orderBy('id','DESC')->first();

                                            $output['id'] = $userDetails->id??'';
                                            $output['name'] = $userDetails->name??'';
                                            $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                            $output['email'] = $userDetails->email??'';
                                            $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                            $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                            $output['device_token'] = $userDetails->device_token??'';
                                            $output['device_type'] = $userDetails->device_type??'';
                                            $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                            $output['mobile_number'] = $userDetails->mobile_number??'';
                                            $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                            $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                            $output['status'] = $userDetails->status??'';
                                            $output['login_type'] = $userDetails->login_type??'';
                                            $output['email_verify'] = $userDetails->email_verify??'';
                                            $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                            $output['questionneres'] = $userDetails->questionneres??'';
                                            $output['session_token'] = $userDetails->session_token??'';
                                            $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                            $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                            $output['user_calender_status'] = $calender->status??'';

                                            $output['inputs'] = $inputs??(object)[];
                                        }
                                        else
                                        {
                                            $status = 201;
                                            $statusCode = 201;
                                            $message = "Calender Phase Data Not Intersed";
                                        }

                                    }

                                }
                                else
                                {
                                    $status = 201;
                                    $statusCode = 201;
                                    $message = "No Data Found";
                                }
                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "Calender Data Not Intersed";
                            }
                        }
                    }
                    else
                    {
                        $status = 201;
                        $statusCode = 201;
                        $message = "No Data Insert";
                    }
                }
                else
                {
                    $status = 201;
                    $statusCode = 201;
                    $message = "This Input Date Already In Phase";
                }

            }
            else
            {

                foreach ($answer_id as $key => $value) 
                {
                    $answer = Answers::find($value);


                        if($answer->answers == 'Others')
                        {
                            $insert = UserQuestionAnswer::insert([
                                'user_id' => $user_id,
                                'question_id' => $answer->ques_id,
                                'answer_id' => $value,
                                'answer' => $others
                            ]);
                        }
                        else
                        {
                            $insert = UserQuestionAnswer::insert([
                                'user_id' => $user_id,
                                'question_id' => $answer->ques_id,
                                'answer_id' => $value,
                                'answer' => $answer->answers
                            ]);    
                        }
                        
                }

                if($insert)
                {
                    $update_arr = [
                        'questionneres'   => true,
                        'name'            => $name,
                        'dob'             => $dob
                    ];
                    $user_upd = $this->userRepository->updateByCondition(array('id'=>$user_id), $update_arr);

                    if($diff_day <= 15 || $e_date < $current_date)
                    {

                        if($e_date < $current_date)
                        {
                            $new_e_date = 15+$diff_day;
                            $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days')); 
                        }
                        else
                        {
                            $new_e_date = 15-$diff_day;
                            $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days'));    
                        }
                        $totalDays = $totalDays + $new_e_date;

                        if($checking_date >= $nowDate)
                        {
                            $calender = UserCalender::insert([
                            'user_id' => $user_id,
                            'sdate'   => $firstDayLastPeriod,
                            'edate'   => $edate,
                            'duration'=> $totalDays,
                            'status'  => 1
                            ]);
                        }
                        else
                        {
                            $calender = UserCalender::insert([
                            'user_id' => $user_id,
                            'sdate'   => $firstDayLastPeriod,
                            'edate'   => $edate,
                            'duration'=> $totalDays,
                            'status'  => 0
                            ]);    
                        }
                        

                        if($calender)
                        {
                            $userCalender = UserCalender::where('user_id',$user_id)->first();

                            if($totalDays < 21)
                            {
                                $p = Phase::where('duration', 21)->first();   
                                $q = Phase::where('duration', 21)->count();   
                            }
                            elseif($totalDays > 35)
                            {
                                $p = Phase::where('duration', 35)->first();    
                                $q = Phase::where('duration', 35)->count();    
                            }
                            else
                            {
                                $p = Phase::where('duration', $totalDays)->first(); 
                                $q = Phase::where('duration', $totalDays)->count(); 
                            }

                            if($q > 0)
                            {
                                $phase_1 = $duration-$one;
                                $phase_2 = $p->phase_two;
                                $phase_3 = $p->phase_three;
                                $last_phase = ($totalDays - ($duration + $phase_2 + $phase_3));


                                for($i=0; $i<$phase;$i++)
                                {

                                    if($i == 0) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($firstDayLastPeriod));
                                        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                        $phase_color = 'clear';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$duration,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 1) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                        $phase_color = 'yellow';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_2,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 2) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                        $phase_color = 'orange';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_3,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }
                                    else 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                        $phase_color = 'red';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$last_phase,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }

                                    if($instCalenderPhase)
                                    {
                                        $user_answer = UserQuestionAnswer::select('id','user_id', 'question_id', 'answer_id', 'answer')->where('user_id', $user_id)->get();

                                        $status = 200;
                                        $statusCode = 200;
                                        $message = "Data Insert Successful";



                                        $userDetails = User::find($user_id);
                                        $calender = UserCalender::where('user_id', $user_id)->orderBy('id','DESC')->first();

                                        $output['id'] = $userDetails->id??'';
                                        $output['name'] = $userDetails->name??'';
                                        $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                        $output['email'] = $userDetails->email??'';
                                        $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                        $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                        $output['device_token'] = $userDetails->device_token??'';
                                        $output['device_type'] = $userDetails->device_type??'';
                                        $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                        $output['mobile_number'] = $userDetails->mobile_number??'';
                                        $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                        $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                        $output['status'] = $userDetails->status??'';
                                        $output['login_type'] = $userDetails->login_type??'';
                                        $output['email_verify'] = $userDetails->email_verify??'';
                                        $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                        $output['questionneres'] = $userDetails->questionneres??'';
                                        $output['session_token'] = $userDetails->session_token??'';
                                        $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                        $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                        $output['user_calender_status'] = $calender->status??'';

                                        $output['inputs'] = $inputs??(object)[];
                                    }
                                    else
                                    {
                                        $status = 201;
                                        $statusCode = 201;
                                        $message = "Calender Phase Data Not Intersed";
                                    }

                                }

                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "No Data Found";
                            }
                        }
                        else
                        {
                            $status = 201;
                            $statusCode = 201;
                            $message = "Calender Data Not Intersed";
                        }
                    }
                    else
                    {
                        if($checking_date >= $nowDate)
                        {
                            $calender = UserCalender::insert([
                                'user_id' => $user_id,
                                'sdate'   => $firstDayLastPeriod,
                                'edate'   => $edate,
                                'duration'=> $totalDays,
                                'status'  => 1
                            ]);
                        }
                        else
                        {
                            $calender = UserCalender::insert([
                                'user_id' => $user_id,
                                'sdate'   => $firstDayLastPeriod,
                                'edate'   => $edate,
                                'duration'=> $totalDays,
                                'status'  => 0
                            ]);
                        }

                        if($calender)
                        {
                            $userCalender = UserCalender::where('user_id',$user_id)->first();

                            $p = Phase::where('duration', $totalDays)->first();
                            if($p->count() >0)
                            {
                                $phase_1 = $duration-$one;
                                $phase_2 = $p->phase_two;
                                $phase_3 = $p->phase_three;
                                $last_phase = ($totalDays - ($duration + $phase_2 + $phase_3));


                                for($i=0; $i<$phase;$i++)
                                {

                                    if($i == 0) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($firstDayLastPeriod));
                                        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                        $phase_color = 'clear';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$duration,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 1) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                        $phase_color = 'yellow';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_2,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 2) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                        $phase_color = 'orange';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_3,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }
                                    else 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                        $phase_color = 'red';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$userCalender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$last_phase,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }

                                    if($instCalenderPhase)
                                    {
                                        $user_answer = UserQuestionAnswer::select('id','user_id', 'question_id', 'answer_id', 'answer')->where('user_id', $user_id)->get();

                                        $status = 200;
                                        $statusCode = 200;
                                        $message = "Data Insert Successful";



                                        $userDetails = User::find($user_id);
                                        $calender = UserCalender::where('user_id', $user_id)->orderBy('id','DESC')->first();

                                        $output['id'] = $userDetails->id??'';
                                        $output['name'] = $userDetails->name??'';
                                        $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                        $output['email'] = $userDetails->email??'';
                                        $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                        $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                        $output['device_token'] = $userDetails->device_token??'';
                                        $output['device_type'] = $userDetails->device_type??'';
                                        $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                        $output['mobile_number'] = $userDetails->mobile_number??'';
                                        $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                        $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                        $output['status'] = $userDetails->status??'';
                                        $output['login_type'] = $userDetails->login_type??'';
                                        $output['email_verify'] = $userDetails->email_verify??'';
                                        $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                        $output['questionneres'] = $userDetails->questionneres??'';
                                        $output['session_token'] = $userDetails->session_token??'';
                                        $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                        $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                        $output['user_calender_status'] = $calender->status??'';
                                        $output['inputs'] = $inputs??(object)[];
                                    }
                                    else
                                    {
                                        $status = 201;
                                        $statusCode = 201;
                                        $message = "Calender Phase Data Not Intersed";
                                    }

                                }
                            }
                        }
                        else
                        {
                            $status = 201;
                            $statusCode = 201;
                            $message = "Calender Data Not Intersed";
                        }
                    }
                }
                else
                {
                    $status = 201;
                    $statusCode = 201;
                    $message = "No Data Insert";
                }
            }




        }
        else
        {
            $status = 201;
            $statusCode = 201;
            $message = "Please Fill The Required Fields";
        }

        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);

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


    public function questionnaireSecond(Request $request)
    {
        $response = array();
        $output = array();

        $inputs = $request->all();
        $inputs = getTrimmedValue($inputs);

        // Inputs
        $user_id = trim($request->input('user_id'));
        $LastPeriod = trim($request->input('firstDayLastPeriod'));
        $duration = trim($request->input('durationLastPeriod'));
        $allLastPeriod = explode(',', $LastPeriod);
        $allDutation = explode(',', $duration);
        $finalDuration = [];
        $dates = [];
        $from_date = 0;
        $nowDate = date('Y-m-d');
        
        if($user_id && $LastPeriod && $duration)
        {
            foreach ($allLastPeriod as $key => $value) 
            {

                if($key != 0)
                {
                    $start_date = Carbon::parse($value);
                    $diff_start_date = $start_date->diffInDays($from_date);
                    array_push($finalDuration, $diff_start_date); 
                    $from_date = Carbon::parse($value);
                }
                else
                {
                    $from_date = Carbon::parse($value);
                }

            }

            if(count($finalDuration)>0)
            {
                $average = array_sum($finalDuration)/count($finalDuration);
                array_push($finalDuration, ceil($average));
            }
            else
            {
                $average = 28;
                array_push($finalDuration, $average);
            }

            foreach ($finalDuration as $key => $value) 
            {
                for($i=0; $i<$value; $i++)
                {
                    $all_dates = Carbon::parse($allLastPeriod[$key])->addDays($i);
                    array_push($dates, $all_dates);    
                }
            }

            $userCalender = UserCalender::where('user_id',$user_id)->get();
            if($userCalender)
            {
                foreach ($userCalender as $key => $value) 
                {
                    $userCalenderDelete = UserCalender::where('id', $value->id)->delete();
                    $userCalenderPhaseDelete = UserCalenderPhase::where('user_calender_id', $value->id)->delete();
                }

            }

            foreach($allLastPeriod as $key => $val) 
            {
                
                $givenDate = date('Y-m-d', strtotime($val));
                $phase = 4;
                $totalDays = $finalDuration[$key];
                $one = 1;
                $tdate = $totalDays - $one;
                $edate = date('Y-m-d', strtotime($val. ' + '.$tdate.' days'));
                $minusDate = $allDutation[$key]-$one;
                $checking_date = date('Y-m-d', strtotime($givenDate. ' + '.$minusDate.' days'));
            
                // echo $checking_date.'|';

                if(count($finalDuration) == 1 && $finalDuration[$key] == 28)
                {
                    $e_date   = Carbon::parse($edate);
                    $current_date = Carbon::parse($nowDate);
                    $diff_day     = $current_date->diffInDays($e_date);
                    // dd($diff_day);
                    if($diff_day <= 15 || $e_date < $current_date)
                    {
                        if($e_date < $current_date)
                        {
                            $new_e_date = 15+$diff_day;
                            $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days')); 
                        }
                        else
                        {
                            $new_e_date = 15-$diff_day;
                            $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days'));    
                        }

                        $totalDays = $totalDays + $new_e_date;

                        if($checking_date >= $nowDate)
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status = 1;
                        }
                        else
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status = 0;
                        }    
                        

                        if($calender->save())
                        {
                            if($totalDays < 21)
                            {
                                $p = Phase::where('duration', 21)->first();   
                                $q = Phase::where('duration', 21)->count();   
                            }
                            elseif($totalDays > 35)
                            {
                                $p = Phase::where('duration', 35)->first();    
                                $q = Phase::where('duration', 35)->count();    
                            }
                            else
                            {
                                $p = Phase::where('duration', $totalDays)->first(); 
                                $q = Phase::where('duration', $totalDays)->count(); 
                            }
                            if($q > 0)
                            {
                                $duration = $totalDays;
                                $phase_1 = $allDutation[$key]-$one;
                                $phase_2 = $p->phase_two;
                                $phase_3 = $p->phase_three;
                                $last_phase = ($duration - ($allDutation[$key] + $phase_2 + $phase_3));

                                for($i=0; $i<$phase;$i++)
                                {

                                    if($i == 0) 
                                    {

                                        $start_date = $givenDate;
                                        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                        $phase_color = 'clear';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$allDutation[$key],
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 1) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                        $phase_color = 'yellow';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_2,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 2) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                        // dd($each_phase);
                                        $phase_color = 'orange';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_3,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }
                                    else 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                        $phase_color = 'red';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$last_phase,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }

                                    if($instCalenderPhase)
                                    {

                                        foreach ($dates as $key => $value) 
                                        {
                                            $givenD = date('Y-m-d', strtotime($value));
                                            $getUserCalender = UserCalender::where('user_id',$inputs['user_id'])->whereDate('sdate', '<=', $givenD)->whereDate('edate', '>=', $givenD)->first();
                                            $getUserCalenderPhase = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->first();
                                            if($getUserCalender && $getUserCalenderPhase)
                                            {
                                                $upd = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->update(['calender_id' => $getUserCalender->id]);

                                            }
                                        }
                                        $status = 200;
                                        $statusCode = 200;
                                        $message = "Data Insert Successful";

                                        $userDetails = User::find($user_id);

                                        $output['id'] = $userDetails->id??'';
                                        $output['name'] = $userDetails->name??'';
                                        $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                        $output['email'] = $userDetails->email??'';
                                        $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                        $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                        $output['device_token'] = $userDetails->device_token??'';
                                        $output['device_type'] = $userDetails->device_type??'';
                                        $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                        $output['mobile_number'] = $userDetails->mobile_number??'';
                                        $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                        $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                        $output['status'] = $userDetails->status??'';
                                        $output['login_type'] = $userDetails->login_type??'';
                                        $output['email_verify'] = $userDetails->email_verify??'';
                                        $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                        $output['questionneres'] = $userDetails->questionneres??'';
                                        $output['session_token'] = $userDetails->session_token??'';
                                        $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                        $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                        $output['user_calender_status'] = $calender->status??'';

                                        $output['inputs'] = $inputs??(object)[];

                                    }
                                    else
                                    {
                                        $status = 201;
                                        $statusCode = 201;
                                        $message = "Calender Phase Data Not Intersed";
                                    }

                                }
                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "No Data Found";
                            }                      

                        }
                        else
                        {
                            $status = 201;
                            $statusCode = 201;
                            $message = "Calender Data Not Intersed";
                        }
                    }
                    else
                    {
                        
                        if($checking_date >= $nowDate)
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status  = 1;
                        }
                        else
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status = 0;
                        }
                        

                        if($calender->save())
                        {
                            if($totalDays < 21)
                            {
                                $p = Phase::where('duration', 21)->first();   
                                $q = Phase::where('duration', 21)->count();   
                            }
                            elseif($totalDays > 35)
                            {
                                $p = Phase::where('duration', 35)->first();    
                                $q = Phase::where('duration', 35)->count();    
                            }
                            else
                            {
                                $p = Phase::where('duration', $totalDays)->first(); 
                                $q = Phase::where('duration', $totalDays)->count(); 
                            }
                            if($q > 0)
                            {
                                $duration = $totalDays;
                                $phase_1 = $allDutation[$key]-$one;
                                $phase_2 = $p->phase_two;
                                $phase_3 = $p->phase_three;
                                $last_phase = ($duration - ($allDutation[$key] + $phase_2 + $phase_3));

                                for($i=0; $i<$phase;$i++)
                                {

                                    if($i == 0) 
                                    {

                                        $start_date = $givenDate;
                                        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                        $phase_color = 'clear';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$allDutation[$key],
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 1) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                        $phase_color = 'yellow';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_2,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 2) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                        // dd($each_phase);
                                        $phase_color = 'orange';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_3,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }
                                    else 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                        $phase_color = 'red';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$last_phase,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }

                                    if($instCalenderPhase)
                                    {

                                        foreach ($dates as $key => $value) 
                                        {
                                            $givenD = date('Y-m-d', strtotime($value));
                                            $getUserCalender = UserCalender::where('user_id',$inputs['user_id'])->whereDate('sdate', '<=', $givenD)->whereDate('edate', '>=', $givenD)->first();
                                            $getUserCalenderPhase = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->first();
                                            if($getUserCalender && $getUserCalenderPhase)
                                            {
                                                $upd = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->update(['calender_id' => $getUserCalender->id]);

                                            }
                                        }
                                        $status = 200;
                                        $statusCode = 200;
                                        $message = "Data Insert Successful";

                                        $userDetails = User::find($user_id);

                                        $output['id'] = $userDetails->id??'';
                                        $output['name'] = $userDetails->name??'';
                                        $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                        $output['email'] = $userDetails->email??'';
                                        $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                        $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                        $output['device_token'] = $userDetails->device_token??'';
                                        $output['device_type'] = $userDetails->device_type??'';
                                        $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                        $output['mobile_number'] = $userDetails->mobile_number??'';
                                        $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                        $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                        $output['status'] = $userDetails->status??'';
                                        $output['login_type'] = $userDetails->login_type??'';
                                        $output['email_verify'] = $userDetails->email_verify??'';
                                        $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                        $output['questionneres'] = $userDetails->questionneres??'';
                                        $output['session_token'] = $userDetails->session_token??'';
                                        $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                        $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                        $output['user_calender_status'] = $calender->status??'';

                                        $output['inputs'] = $inputs??(object)[];

                                    }
                                    else
                                    {
                                        $status = 201;
                                        $statusCode = 201;
                                        $message = "Calender Phase Data Not Intersed";
                                    }

                                }
                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "No Data Found";
                            }                      

                        }
                        else
                        {
                            $status = 201;
                            $statusCode = 201;
                            $message = "Calender Data Not Intersed";
                        }
                    }
                }
                else
                {
                    if($key === count($allLastPeriod)-1)
                    {
                        $e_date   = Carbon::parse($edate);
                        $current_date = Carbon::parse($nowDate);
                        $diff_day     = $current_date->diffInDays($e_date);
                        // dd($diff_day);
                        if($diff_day <= 15 || $e_date < $current_date)
                        {
                            if($e_date < $current_date)
                            {
                                $new_e_date = 15+$diff_day;
                                $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days')); 
                            }
                            else
                            {
                                $new_e_date = 15-$diff_day;
                                $edate = date('Y-m-d', strtotime($edate. ' + '.$new_e_date.' days'));    
                            }

                            $totalDays = $totalDays + $new_e_date;

                            if($checking_date >= $nowDate)
                            {
                                $calender = new UserCalender;
                                $calender->user_id = $user_id;
                                $calender->sdate   = $givenDate;
                                $calender->edate   = $edate;
                                $calender->duration= $totalDays;
                                $calender->status  = 1;
                            }
                            else
                            {
                                $calender = new UserCalender;
                                $calender->user_id = $user_id;
                                $calender->sdate   = $givenDate;
                                $calender->edate   = $edate;
                                $calender->duration= $totalDays;
                                $calender->status = 0;
                            }

                            if($calender->save())
                            {
                                if($totalDays < 21)
                                {
                                    $p = Phase::where('duration', 21)->first();   
                                    $q = Phase::where('duration', 21)->count();   
                                }
                                elseif($totalDays > 35)
                                {
                                    $p = Phase::where('duration', 35)->first();    
                                    $q = Phase::where('duration', 35)->count();    
                                }
                                else
                                {
                                    $p = Phase::where('duration', $totalDays)->first(); 
                                    $q = Phase::where('duration', $totalDays)->count(); 
                                }
                                if($q > 0)
                                {
                                    $duration = $totalDays;
                                    $phase_1 = $allDutation[$key]-$one;
                                    $phase_2 = $p->phase_two;
                                    $phase_3 = $p->phase_three;
                                    $last_phase = ($duration - ($allDutation[$key] + $phase_2 + $phase_3));

                                    for($i=0; $i<$phase;$i++)
                                    {

                                        if($i == 0) 
                                        {

                                            $start_date = $givenDate;
                                            $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                            $phase_color = 'clear';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$allDutation[$key],
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 1) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                            $phase_color = 'yellow';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_2,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 2) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                            // dd($each_phase);
                                            $phase_color = 'orange';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_3,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }
                                        else 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                            $phase_color = 'red';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$last_phase,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }

                                        if($instCalenderPhase)
                                        {

                                            foreach ($dates as $key => $value) 
                                            {
                                                $givenD = date('Y-m-d', strtotime($value));
                                                $getUserCalender = UserCalender::where('user_id',$inputs['user_id'])->whereDate('sdate', '<=', $givenD)->whereDate('edate', '>=', $givenD)->first();
                                                $getUserCalenderPhase = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->first();
                                                if($getUserCalender && $getUserCalenderPhase)
                                                {
                                                    $upd = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->update(['calender_id' => $getUserCalender->id]);

                                                }
                                            }
                                            $status = 200;
                                            $statusCode = 200;
                                            $message = "Data Insert Successful";

                                            $userDetails = User::find($user_id);

                                            $output['id'] = $userDetails->id??'';
                                            $output['name'] = $userDetails->name??'';
                                            $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                            $output['email'] = $userDetails->email??'';
                                            $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                            $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                            $output['device_token'] = $userDetails->device_token??'';
                                            $output['device_type'] = $userDetails->device_type??'';
                                            $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                            $output['mobile_number'] = $userDetails->mobile_number??'';
                                            $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                            $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                            $output['status'] = $userDetails->status??'';
                                            $output['login_type'] = $userDetails->login_type??'';
                                            $output['email_verify'] = $userDetails->email_verify??'';
                                            $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                            $output['questionneres'] = $userDetails->questionneres??'';
                                            $output['session_token'] = $userDetails->session_token??'';
                                            $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                            $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                            $output['user_calender_status'] = $calender->status??'';

                                            $output['inputs'] = $inputs??(object)[];

                                        }
                                        else
                                        {
                                            $status = 201;
                                            $statusCode = 201;
                                            $message = "Calender Phase Data Not Intersed";
                                        }

                                    }
                                }
                                else
                                {
                                    $status = 201;
                                    $statusCode = 201;
                                    $message = "No Data Found";
                                }                      

                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "Calender Data Not Intersed";
                            }
                        }
                        else
                        {
                            if($checking_date >= $nowDate)
                            {
                                $calender = new UserCalender;
                                $calender->user_id = $user_id;
                                $calender->sdate   = $givenDate;
                                $calender->edate   = $edate;
                                $calender->duration= $totalDays;
                                $calender->status  = 1;
                            }
                            else
                            {
                                $calender = new UserCalender;
                                $calender->user_id = $user_id;
                                $calender->sdate   = $givenDate;
                                $calender->edate   = $edate;
                                $calender->duration= $totalDays;
                                $calender->status = 0;
                            }

                            if($calender->save())
                            {
                                if($totalDays < 21)
                                {
                                    $p = Phase::where('duration', 21)->first();   
                                    $q = Phase::where('duration', 21)->count();   
                                }
                                elseif($totalDays > 35)
                                {
                                    $p = Phase::where('duration', 35)->first();    
                                    $q = Phase::where('duration', 35)->count();    
                                }
                                else
                                {
                                    $p = Phase::where('duration', $totalDays)->first(); 
                                    $q = Phase::where('duration', $totalDays)->count(); 
                                }
                                if($q > 0)
                                {
                                    $duration = $totalDays;
                                    $phase_1 = $allDutation[$key]-$one;
                                    $phase_2 = $p->phase_two;
                                    $phase_3 = $p->phase_three;
                                    $last_phase = ($duration - ($allDutation[$key] + $phase_2 + $phase_3));

                                    for($i=0; $i<$phase;$i++)
                                    {

                                        if($i == 0) 
                                        {

                                            $start_date = $givenDate;
                                            $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                            $phase_color = 'clear';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$allDutation[$key],
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 1) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                            $phase_color = 'yellow';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_2,
                                                'phase_color'=>$phase_color
                                            ]);
                                        } 
                                        elseif($i == 2) 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                            // dd($each_phase);
                                            $phase_color = 'orange';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$phase_3,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }
                                        else 
                                        {

                                            $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                            $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                            $phase_color = 'red';
                                            $instCalenderPhase = UserCalenderPhase::insert([
                                                'user_calender_id'=>$calender->id,
                                                'phase_no'=>$i+1,
                                                'phase_sdate'=>$start_date,
                                                'phase_edate'=>$end_date,
                                                'phase_duration'=>$last_phase,
                                                'phase_color'=>$phase_color
                                            ]);
                                        }

                                        if($instCalenderPhase)
                                        {

                                            foreach ($dates as $key => $value) 
                                            {
                                                $givenD = date('Y-m-d', strtotime($value));
                                                $getUserCalender = UserCalender::where('user_id',$inputs['user_id'])->whereDate('sdate', '<=', $givenD)->whereDate('edate', '>=', $givenD)->first();
                                                $getUserCalenderPhase = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->first();
                                                if($getUserCalender && $getUserCalenderPhase)
                                                {
                                                    $upd = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->update(['calender_id' => $getUserCalender->id]);

                                                }
                                            }
                                            $status = 200;
                                            $statusCode = 200;
                                            $message = "Data Insert Successful";

                                            $userDetails = User::find($user_id);

                                            $output['id'] = $userDetails->id??'';
                                            $output['name'] = $userDetails->name??'';
                                            $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                            $output['email'] = $userDetails->email??'';
                                            $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                            $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                            $output['device_token'] = $userDetails->device_token??'';
                                            $output['device_type'] = $userDetails->device_type??'';
                                            $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                            $output['mobile_number'] = $userDetails->mobile_number??'';
                                            $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                            $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                            $output['status'] = $userDetails->status??'';
                                            $output['login_type'] = $userDetails->login_type??'';
                                            $output['email_verify'] = $userDetails->email_verify??'';
                                            $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                            $output['questionneres'] = $userDetails->questionneres??'';
                                            $output['session_token'] = $userDetails->session_token??'';
                                            $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                            $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                            $output['user_calender_status'] = $calender->status??'';

                                            $output['inputs'] = $inputs??(object)[];

                                        }
                                        else
                                        {
                                            $status = 201;
                                            $statusCode = 201;
                                            $message = "Calender Phase Data Not Intersed";
                                        }

                                    }
                                }
                                else
                                {
                                    $status = 201;
                                    $statusCode = 201;
                                    $message = "No Data Found";
                                }                      

                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "Calender Data Not Intersed";
                            }
                        }
                    }
                    else
                    {
                        if($checking_date >= $nowDate)
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status  = 1;
                        }
                        else
                        {
                            $calender = new UserCalender;
                            $calender->user_id = $user_id;
                            $calender->sdate   = $givenDate;
                            $calender->edate   = $edate;
                            $calender->duration= $totalDays;
                            $calender->status = 0;
                        }

                        if($calender->save())
                        {
                            if($totalDays < 21)
                            {
                                $p = Phase::where('duration', 21)->first();   
                                $q = Phase::where('duration', 21)->count();   
                            }
                            elseif($totalDays > 35)
                            {
                                $p = Phase::where('duration', 35)->first();    
                                $q = Phase::where('duration', 35)->count();    
                            }
                            else
                            {
                                $p = Phase::where('duration', $totalDays)->first(); 
                                $q = Phase::where('duration', $totalDays)->count(); 
                            }
                            if($q > 0)
                            {
                                $duration = $totalDays;
                                $phase_1 = $allDutation[$key]-$one;
                                $phase_2 = $p->phase_two;
                                $phase_3 = $p->phase_three;
                                $last_phase = ($duration - ($allDutation[$key] + $phase_2 + $phase_3));

                                for($i=0; $i<$phase;$i++)
                                {

                                    if($i == 0) 
                                    {

                                        $start_date = $givenDate;
                                        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$phase_1.' days'));
                                        $phase_color = 'clear';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$allDutation[$key],
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 1) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_2.' days'));
                                        $phase_color = 'yellow';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_2,
                                            'phase_color'=>$phase_color
                                        ]);
                                    } 
                                    elseif($i == 2) 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$phase_3.' days'));
                                        // dd($each_phase);
                                        $phase_color = 'orange';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$phase_3,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }
                                    else 
                                    {

                                        $start_date = date('Y-m-d', strtotime($end_date. ' + '.$one.' days'));
                                        $end_date = date('Y-m-d', strtotime($end_date. ' + '.$last_phase.' days'));
                                        $phase_color = 'red';
                                        $instCalenderPhase = UserCalenderPhase::insert([
                                            'user_calender_id'=>$calender->id,
                                            'phase_no'=>$i+1,
                                            'phase_sdate'=>$start_date,
                                            'phase_edate'=>$end_date,
                                            'phase_duration'=>$last_phase,
                                            'phase_color'=>$phase_color
                                        ]);
                                    }

                                    if($instCalenderPhase)
                                    {

                                        foreach ($dates as $key => $value) 
                                        {
                                            $givenD = date('Y-m-d', strtotime($value));
                                            $getUserCalender = UserCalender::where('user_id',$inputs['user_id'])->whereDate('sdate', '<=', $givenD)->whereDate('edate', '>=', $givenD)->first();
                                            $getUserCalenderPhase = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->first();
                                            if($getUserCalender && $getUserCalenderPhase)
                                            {
                                                $upd = CategorySymptom::where('user_id',$inputs['user_id'])->where('date', $givenD)->update(['calender_id' => $getUserCalender->id]);

                                            }
                                        }
                                        $status = 200;
                                        $statusCode = 200;
                                        $message = "Data Insert Successful";

                                        $userDetails = User::find($user_id);

                                        $output['id'] = $userDetails->id??'';
                                        $output['name'] = $userDetails->name??'';
                                        $output['dob'] = $userDetails->dob?date('d-m-Y', strtotime($userDetails->dob)):'';
                                        $output['email'] = $userDetails->email??'';
                                        $output['email_verified_at'] = $userDetails->email_verified_at??'';
                                        $output['avatar_location'] = $userDetails->avatar_location?getImgPath('users', $userDetails->avatar_location, 'api'):'';
                                        $output['device_token'] = $userDetails->device_token??'';
                                        $output['device_type'] = $userDetails->device_type??'';
                                        $output['mobile_country_code'] = $userDetails->mobile_country_code??'';
                                        $output['mobile_number'] = $userDetails->mobile_number??'';
                                        $output['mobile_verification_code'] = $userDetails->mobile_verification_code??'';
                                        $output['email_verification_code'] = $userDetails->email_verification_code??'';
                                        $output['status'] = $userDetails->status??'';
                                        $output['login_type'] = $userDetails->login_type??'';
                                        $output['email_verify'] = $userDetails->email_verify??'';
                                        $output['mobile_verify'] = $userDetails->mobile_verify??'';
                                        $output['questionneres'] = $userDetails->questionneres??'';
                                        $output['session_token'] = $userDetails->session_token??'';
                                        $output['created_at'] = $userDetails->created_at->toDateString()??'';
                                        $output['updated_at'] = $userDetails->updated_at->toDateString()??'';
                                        $output['user_calender_status'] = $calender->status??'';
                                        $output['inputs'] = $inputs??(object)[];

                                    }
                                    else
                                    {
                                        $status = 201;
                                        $statusCode = 201;
                                        $message = "Calender Phase Data Not Intersed";
                                    }

                                }
                            }
                            else
                            {
                                $status = 201;
                                $statusCode = 201;
                                $message = "No Data Found";
                            }                      

                        }
                        else
                        {
                            $status = 201;
                            $statusCode = 201;
                            $message = "Calender Data Not Intersed";
                        }
                    }

                }
            }
        }
        else
        {
            $status = 201;
            $statusCode = 201;
            $message = "Please Fill The Required Fields";
        }

        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);

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


    public function test(Request $request)
    {
        $response = array();
        $output = array();

        $email = trim($request->input('email'));
        $phone = trim($request->input('phone'));

        if($email || $phone)
        {
            if($email)
            {
                $user = User::where('email', $email)->get();
                if(count($user)>0)
                {
                    User::where('email', $email)->delete();
                    $status = 200;
                    $statusCode = 200;
                    $message = "Email Deleted Successful";
                }
                else
                {
                    $status = 201;
                    $statusCode = 201;
                    $message = "Email Not Exists";
                }
            }

            if($phone)
            {
                $user = User::where('mobile_number', $phone)->get();
                if(count($user)>0)
                {
                    User::where('mobile_number', $phone)->delete();
                    $status = 200;
                    $statusCode = 200;
                    $message = "Mobile Number Deleted Successful";
                }
                else
                {
                    $status = 201;
                    $statusCode = 201;
                    $message = "Mobile Number Not Exists";
                }
            }
        }
        else
        {
            $status = 201;
            $statusCode = 201;
            $message = "Please fill atleast one field";
        }       




        $response = array('status'=>$status, 'message'=>$message);

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



    



}
