<?php

namespace App\Http\Controllers;

use App\Models\AncillaryCharge;
use App\Models\CollectSample;
use App\Models\User;


use Illuminate\Http\Request;
use App\Models\ParticipantClinicalStudy;
use App\Models\Payment;
use App\Models\SampleAncillaryCharges;
use App\Models\Visit;
use Carbon\Carbon;
use App\Models\Comment;

class RecordSampleController extends Controller
{
    public function index()
    {
        $subjects = ParticipantClinicalStudy::where('status','=','Active')->where('subjectId','!=',null)->get();

        $sampleTypes =  curl(config('app.services_url') . strtolower('site-collector') . "/listSampleTypes", [
            'listingParameter' => [
                'tenant_code' => session('SponsorSSOId')
            ]
        ], null, ['name']);
        $visits = Visit::where('siteId','=',session('Site_UUID'))->orderByDesc('updated_at')->get();
        return view('record_sample.index', compact('subjects','sampleTypes','visits'));
    }

    public function create(Request $request){

        $validated = $request->validate([
            'subjectId' => 'required',
            'date' => 'required',
            'type'  => 'required'
        ], [
            'subjectId.required' => 'Subject ID is required',
            'date.required' => 'Collection date is required',
            'type.required' => 'Sample type is required',
        ]);

        $subjectId = $request->subjectId;
        $date = $request->date;
        $type = $request->type;
        $participantClinicalStudy = ParticipantClinicalStudy::where('subjectId','=',$subjectId)->first();
        $costCenter =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listCostCenters", [
            'listingParameter' => [
                'study_id' => $participantClinicalStudy->clinicalStudyId
            ]
        ],null,[]);
        $user = User::where('id', '=', $participantClinicalStudy->participantId)->with('clinicalStudies', function ($query) use($participantClinicalStudy){
            $query->where('clinicalStudyId', '=', $participantClinicalStudy->clinicalStudyId);
        })->first();
        if (isset($user)) {
            $checkClinicalStudy = ParticipantClinicalStudy::where('participantId','=',$user->id)->where('clinicalStudyId','=',$participantClinicalStudy->clinicalStudyId)->first();
            if (isset($checkClinicalStudy)) {
                if ($user->compensationType == null) {
                    return redirect('record_sample')->with('error', 'Please ask subject to complete the profile.');
                }
                $sampleTypes =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listSpecificSampleType", [
                    'listingParameter' => [
                        'sample_type' => $type,
                        'tenant_code' => session('SponsorSSOId')
                    ]
                ], null, []);
                $typeName = $type;
                $trails = $sampleTypes;
                $array = [];
                foreach ($trails as $key => $single) {
                        $array[] = [
                            'data' => $single,
                            'status' => 'Pass'
                        ];
                }
                // return $trails;
                $fetchedchargesCurl =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listAncillaryTypes", [
                    'listingParameter' => [
                        'tenant_code' => session('SponsorSSOId')
                    ]
                ], null, ['name']);
                $charges = $fetchedchargesCurl;
                $clinicalStudyId = $participantClinicalStudy->clinicalStudyId;
                $subjectId = $participantClinicalStudy->subjectId;
                $visitId = $this->checkUUID();
                $studyData = curl(config('app.services_url') . strtolower('Site-Collector') . "/listClinicalStudy", [
                    'listingParameter' => [
                        'study_id' => $clinicalStudyId
                    ]
                ], null, [
                    'study_name'
                ]);
                $clinicalStudyName = $studyData->study_name;
                return view('record_sample.create', compact('type','date','trails','costCenter','clinicalStudyName', 'array', 'typeName','charges', 'clinicalStudyId', 'subjectId', 'visitId', 'user'));
            } else {
                return redirect('record_sample')->with('error', 'User does not belongs to this clinical study');
            }
        } else {
            return redirect('record_sample')->with('error', 'Subject ID does not exist!');
        }
    }
    public function checkUUID()
    {
        $uuid = getVisitUUID();
        $visit = Visit::where('visitId', '=', $uuid)->first();
        if (isset($visit)) {
            $this->checkUUID();
        } else {
            return $uuid;
        }
    }
    public function getTrails(Request $request)
    {
        $sampleTypes =  curl(config('app.services_url') . 'site-collector' . "/listSampleTypes", [
            'listingParameter' => [
                'tenant_code' => session('SponsorSSOId')
            ]
        ], null, []);
        $trails = $sampleTypes;
        if ($request->ajax()) {
            return $trails;
        }
        return $trails;
    }
    public function store(Request $request)
    {

        $validated = $request->validate([
            'costCenterId' => 'required',
            'quantity.*.*' => 'required',
            'compenstn.*.*' => 'required'
        ],
        [
            'costCenterId.required' => 'Atleast one cost center is required',
            'quantity.*.*.required' => 'count of blood is required',
            'compenstn.*.*.required' => 'count of blood is required'
        ]);

        $participantClinicalStudy = ParticipantClinicalStudy::where('subjectId','=',$request->subjectId)->first();
        $user = User::where('id', '=', $participantClinicalStudy->participantId)->first();

            $visit = Visit::create([
                'visitId' => $request->visitId,
                'subjectId' => $request->subjectId,
                'clinicalStudyId' => $participantClinicalStudy->clinicalStudyId,
                'participantId' => $user->id,
                'siteId' => $participantClinicalStudy->siteId,
                'typeName' => $request->typeName,
                'schedulerId' => 0,
                'acceptedDate' => $request->date,
                'scheuleDate' => $request->date,
                'scheduleTime' => $request->date,
                'sampleRequired' => $request->sampleRequired,
                'rescheduleDate' => null,
                'rescheduleTime' => null,
                'status' => 'Accepted',
                'remind' => null,
                'reason' => null,
                'createdBy' => session('UserName'),
            ]);
            $isDataInserted = 0;
            $collectSampleID = [];
            $AncillaryChargeID = [];
            if (isset($request->costCenterId)) {
                $costCenters = implode(",", $request->costCenterId);
            }else{
                $costCenters = "";
            }
            foreach ($request->name as $key => $name) {
                if ($name != null && $request->quantity[$key][0] != null && $request->no_compensation[$key][0] != null && $request->rate[$key][0] != null && $request->measurement[$key][0] != null) {
                    if ($request->no_compensation[$key][0] == 'Yes') {
                        $com = 1;
                    } else {
                        $com = 0;
                    }
                    $collectSample = CollectSample::create([
                        'subjectId' => $request->subjectId,
                        'sampleUuid' => getUUID(),
                        'visitId' => $visit->id,
                        'clinicalStudyId' => $request->clinicalStudyId,
                        'name' => $name[0],
                        'quantity' => $request->quantity[$key][0],
                        'no_compensation' => $com,
                        'costCenterId' => $costCenters,
                        'rate' => $request->rate[$key][0],
                        'measurement' => $request->measurement[$key][0],
                        'limit' => $request->limit[$key][0],
                        'duration' => $request->duration[$key][0],
                        'status' => 'Pending',
                        'role' => 'Site-Collector',
                        'siteId' => session('Site_UUID'),
                        'createdBy' => session('UserName'),
                        'sponsorSSOId' => session('SponsorSSOId'),
                    ]);
                    $isDataInserted = 1;
                    $finalDate = changeTimeZone();
                    if ($request->limit[$key][0] == null && $request->duration[$key][0] == null) {
                        $previousSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->sum('quantity');
                        $countSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->count('id');
                    } else {
                        $finalDate = changeTimeZone()->subdays((int)$request->duration[$key][0]);
                        $finalDate2 = changeTimeZone()->subdays((int)$request->duration[$key][0]);
                        $previousSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->where('created_at', '>=', $finalDate)->sum('quantity');
                        $countSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->where('created_at', '>=', $finalDate2)->count('id');
                    }
                    $data['listingParameter'] = array(
                        "sample_collection_uuid" => $collectSample->sampleUuid,
                        "name" => fnEncryptProd($user->first_name . ' ' . $user->last_name),
                        "drawn_date" => Carbon::parse($request->date)->format('Y-m-d h:i:s'),
                        "participant_email" => fnEncryptProd($user->email),
                        "erx_id" => $user->erxId,
                        "subject_id" => $participantClinicalStudy->subjectId,
                        "type" => $collectSample->name,
                        "days_elapsed" => $countSamples,
                        "sample_collected" => $previousSamples,
                        "current_sample" => $collectSample->quantity,
                        "description" => "None",
                        "visiting_time" =>Carbon::parse($request->date)->format('Y-m-d h:i:s'),
                        "unit" => $collectSample->measurement,
                        "limit" => $collectSample->limit,
                        "duration" => $collectSample->duration,
                        "tenant_code" => $collectSample->sponsorSSOId
                    );
                    $requeste =  curl(config('app.services_url') . strtolower('Site-Collector') . '/collectSample', $data, 'post');
                    $decodedRequest = $requeste;
                    $collectSampleID[] = $collectSample->id;
                    $template_path = 'collectSample';
                    // \Mail::send(['html' => $template_path], [], function ($message) use ($user) {
                    //     $message->to($user->email, $user->email)
                    //         ->subject('Your Sample Has Been Collected!');
                    // });
                }
            }
            foreach ($request->chargesName as $key2 => $charges) {
                if ($charges != null && $request->chargesType[$key2][0] != null && $request->charges[$key2][0] != null) {
                    $anillaryCharges = AncillaryCharge::create([
                        'subjectId' => $request->subjectId,
                        'clinicalStudyId' => $request->clinicalStudyId,
                        'visitId' => $visit->id,
                        'costCenterId' => $costCenters,
                        'name' => $charges[0],
                        'type' => $request->chargesType[$key2][0],
                        'rate' => $request->charges[$key2][0],
                        'status' => 'Pending',
                        'role' => 'Site-Collector',
                        'siteId' => session('Site_UUID'),
                        'sponsorSSOId' => session('SponsorSSOId'),
                        'createdBy' => session('UserName'),
                    ]);
                    $isDataInserted = 1;
                    $AncillaryChargeID[] = $anillaryCharges->id;
                }
            }
            foreach ($collectSampleID as $key => $sampleID) {
                foreach ($AncillaryChargeID as $key => $chargeID) {
                    $pivot = SampleAncillaryCharges::create([
                        'collectSampleId' => $sampleID,
                        'ancillaryChargesId' => $chargeID,
                    ]);
                    $isDataInserted = 1;
                }
            }
            if($isDataInserted == 1){
                $visit->status = 'Completed';
                $visit->save();
                return redirect('record_sample')->with('success', 'Sample Collected Successfully');
            }else{
                return redirect('record_sample')->with('warning', 'No Data Given');
            }
    }
    public function edit($id)
    {
        $visit = Visit::where('id', '=', $id)->first();
        if (isset($visit)) {
            $participantClinicalStudy = ParticipantClinicalStudy::where('subjectId','=',$visit->subjectId)->first();
            $costCenter =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listCostCenters", [
                'listingParameter' => [
                    'study_id' => $participantClinicalStudy->clinicalStudyId
                ]
            ],null,[
                'name'
            ]);
            $user = User::where('id', '=', $participantClinicalStudy->participantId)->with('clinicalStudies', function ($query) use ($visit) {
                $query->where('clinicalStudyId', '=', $visit->clinicalStudyId);
            })->first();
            if (isset($user)) {
                $preCostCenter = null;
                $checkClinicalStudy = ParticipantClinicalStudy::where('participantId','=',$user->id)->where('clinicalStudyId','=',$visit->clinicalStudyId)->first();
                if (isset($checkClinicalStudy)) {
                    if ($user->compensationType == null) {
                        return redirect('record_sample')->with('error', 'Please ask subject to complete the profile.');
                    }
                    $sampleTypes =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listSpecificSampleType", [
                        'listingParameter' => [
                            'sample_type' => $visit->typeName,
                            'tenant_code' => session('SponsorSSOId')
                        ]
                    ], null, []);
                    $trails = $sampleTypes;
                    $array = [];
                    foreach ($trails as $key => $single) {
                        $preSample = CollectSample::where('subjectId','=',$checkClinicalStudy->subjectId)->where('visitId','=',$id)->where('name','=',$visit->typeName)->first();
                        if (isset($preSample)) {
                            $single->inputValue  = $preSample->quantity;
                            $preCostCenter  = explode(",", $preSample->costCenterId);
                        }else{
                            $single->inputValue  = "";
                        }
                        $single->requiredSample  = $visit->sampleRequired;
                            $array[] = [
                                'data' => $single,
                                'status' => 'Pass'
                            ];
                    }
                    // return $costCenter;
                    $fetchedchargesCurl =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listAncillaryTypes", [
                        'listingParameter' => [
                            'tenant_code' => session('SponsorSSOId')
                        ]
                    ], null, ['name']);
                    $charges = $fetchedchargesCurl;
                    foreach($charges as $charge){
                        $preAncillary = AncillaryCharge::where('visitId','=', $id)->where('subjectId','=',$checkClinicalStudy->subjectId)->where('name','=',$charge->name)->first();
                        if (isset($preAncillary)) {
                            $charge->inputValue  = $preAncillary->rate;
                            $preCostCenter  = explode(",", $preAncillary->costCenterId);
                        }else{
                            $charge->inputValue  = "";
                        }
                        if($charge->type == "Per Hour"){
                            if($charge->inputValue != ""){
                                $charge->inputValue = $charge->inputValue / $charge->rate;
                            }
                        }
                    }
                    foreach ($costCenter as $key => $value) {
                        if ($preCostCenter != null) {
                            foreach ($preCostCenter as $key => $preCost) {
                                if($preCost == $value->name){
                                    $value->isSelected = 1;
                                }
                            }
                        }
                    }
                    // return $charges;
                    $clinicalStudyId = $visit->clinicalStudyId;
                    $subjectId = $visit->subjectId;
                    $visitId = $visit->visitId;
                    $sampleTypes = curl(config('app.services_url') . strtolower('Site-Collector') . "/listClinicalStudy", [
                        'listingParameter' => [
                            'study_id' => $clinicalStudyId
                        ]
                    ], null, [
                        'study_name'
                    ]);
                    $trails = $sampleTypes;
                    $clinicalStudyName = $trails->study_name;
                    // dd($clinicalStudyName);
                    return view('record_sample.edit', compact('costCenter','clinicalStudyName', 'array', 'charges', 'clinicalStudyId', 'subjectId', 'visitId', 'visit', 'user'));
                } else {
                    return redirect('record_sample')->with('error', 'User does not belongs to this clinical study');
                }
            } else {
                return redirect('record_sample')->with('error', 'Subject ID does not exist!');
            }
        } else {
            return redirect('record_sample')->with('error', 'Visit ID does not exist!');
        }
    }
    public function show($id)
    {
        $visit = Visit::where('id', '=', $id)->first();
        if (isset($visit)) {
            $participantClinicalStudy = ParticipantClinicalStudy::where('subjectId','=',$visit->subjectId)->first();
            $costCenter =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listCostCenters", [
                'listingParameter' => [
                    'study_id' => $participantClinicalStudy->clinicalStudyId
                ]
            ],null,[
                'name'
            ]);
            $user = User::where('id', '=', $participantClinicalStudy->participantId)->with('clinicalStudies', function ($query) use ($visit) {
                $query->where('clinicalStudyId', '=', $visit->clinicalStudyId);
            })->first();
            if (isset($user)) {
                $preCostCenter = null;
                $checkClinicalStudy = ParticipantClinicalStudy::where('participantId','=',$user->id)->where('clinicalStudyId','=',$visit->clinicalStudyId)->first();
                if (isset($checkClinicalStudy)) {
                    if ($user->compensationType == null) {
                        return redirect('record_sample')->with('error', 'Please ask subject to complete the profile.');
                    }
                    $sampleTypes =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listSpecificSampleType", [
                        'listingParameter' => [
                            'sample_type' => $visit->typeName,
                            'tenant_code' => session('SponsorSSOId')
                        ]
                    ], null, []);
                    $trails = $sampleTypes;
                    $array = [];
                    foreach ($trails as $key => $single) {
                        $preSample = CollectSample::where('subjectId','=',$checkClinicalStudy->subjectId)->where('visitId','=',$id)->where('name','=',$visit->typeName)->first();
                        if (isset($preSample)) {
                            $single->inputValue  = $preSample->quantity;
                            $preCostCenter  = explode(",", $preSample->costCenterId);
                        }else{
                            $single->inputValue  = "";
                        }
                        $single->requiredSample  = $visit->sampleRequired;
                            $array[] = [
                                'data' => $single,
                                'status' => 'Pass'
                            ];
                    }
                    // return $costCenter;
                    $fetchedchargesCurl =  curl(config('app.services_url') . strtolower('Site-Collector') . "/listAncillaryTypes", [
                        'listingParameter' => [
                            'tenant_code' => session('SponsorSSOId')
                        ]
                    ], null, ['name']);
                    $charges = $fetchedchargesCurl;
                    foreach($charges as $charge){
                        $preAncillary = AncillaryCharge::where('visitId','=', $id)->where('subjectId','=',$checkClinicalStudy->subjectId)->where('name','=',$charge->name)->first();
                        if (isset($preAncillary)) {
                            $charge->inputValue  = $preAncillary->rate;
                            $preCostCenter  = explode(",", $preAncillary->costCenterId);
                        }else{
                            $charge->inputValue  = "";
                        }
                        if($charge->type == "Per Hour"){
                            if($charge->inputValue != ""){
                                $charge->inputValue = $charge->inputValue / $charge->rate;
                            }
                        }
                    }
                    foreach ($costCenter as $key => $value) {
                        if ($preCostCenter != null) {
                            foreach ($preCostCenter as $key => $preCost) {
                                if($preCost == $value->name){
                                    $value->isSelected = 1;
                                }
                            }
                        }
                    }
                    // return $charges;
                    $clinicalStudyId = $visit->clinicalStudyId;
                    $subjectId = $visit->subjectId;
                    $visitId = $visit->visitId;
                    $sampleTypes = curl(config('app.services_url') . strtolower('Site-Collector') . "/listClinicalStudy", [
                        'listingParameter' => [
                            'study_id' => $clinicalStudyId
                        ]
                    ], null, [
                        'study_name'
                    ]);
                    $trails = $sampleTypes;
                    $clinicalStudyName = $trails->study_name;
                    // dd($clinicalStudyName);
                    return view('record_sample.show', compact('costCenter','clinicalStudyName', 'array', 'charges', 'clinicalStudyId', 'subjectId', 'visitId', 'visit', 'user'));
                } else {
                    return redirect('record_sample')->with('error', 'User does not belongs to this clinical study');
                }
            } else {
                return redirect('record_sample')->with('error', 'Subject ID does not exist!');
            }
        } else {
            return redirect('record_sample')->with('error', 'Visit ID does not exist!');
        }
    }
    public function update(Request $request,$id)
    {

        $validated = $request->validate([
            'costCenterId' => 'required',
            'quantity.*.*' => 'required',
            'compenstn.*.*' => 'required',
            'comment' => 'required|min:500'
        ],
        [
            'costCenterId.required' => 'Atleast one cost center is required',
            'quantity.*.*.required' => 'count of blood is required',
            'compenstn.*.*.required' => 'count of blood is required',
            'comment.required' => 'Justification is requied to edit this record',
            'comment.min' => 'Justification must be atleast 500 characters'
        ]);

        $visit = Visit::where('id', '=', $id)->first();
        $collectSampleID = [];
        $AncillaryChargeID = [];
        if (isset($request->costCenterId)) {
            $costCenters = implode(",", $request->costCenterId);
        }else{
            $costCenters = "";
        }
        $participantClinicalStudy = ParticipantClinicalStudy::where('subjectId','=',$request->subjectId)->first();
        $user = User::where('id', '=', $participantClinicalStudy->participantId)->first();
        $collectsample = CollectSample::where('visitId','=',$id)->where('subjectId','=',$participantClinicalStudy->subjectId)->first();
        $oldUUNID = null;
        $doesSampleExists = 0;
        if(isset($collectsample)){
            $doesSampleExists = 1;
            $oldUUNID = $collectsample->sampleUuid;
            $collectsample->delete();
        }else{
            $oldUUNID = getUUID();
        }
        $preAncillary = AncillaryCharge::where('visitId','=',$id)->where('subjectId','=',$participantClinicalStudy->subjectId)->get();
        $preAncillaryId = [];
        foreach($preAncillary as $preSingle){
            $preAncillaryId[] = $preSingle->id;
            $preSingle->delete();
        }
        foreach ($collectSampleID as $key => $presampleID) {
            foreach ($preAncillaryId as $key => $prechargeID) {
                $prePivot = SampleAncillaryCharges::where('collectSampleId', '=', $presampleID)->where('ancillaryChargesId' ,'=', $prechargeID)->first();
                if (isset($prePivot)) {
                    $prePivot->delete();
                }
            }
        }
        foreach ($request->name as $key => $name) {
            if ($name != null && $request->quantity[$key][0] != null && $request->no_compensation[$key][0] != null && $request->rate[$key][0] != null && $request->measurement[$key][0] != null) {
                if ($request->no_compensation[$key][0] == 'Yes') {
                    $com = 1;
                } else {
                    $com = 0;
                }
                $collectSample = CollectSample::create([
                    'subjectId' => $request->subjectId,
                    'sampleUuid' => $oldUUNID,
                    'visitId' => $visit->id,
                    'clinicalStudyId' => $request->clinicalStudyId,
                    'name' => $name[0],
                    'quantity' => $request->quantity[$key][0],
                    'no_compensation' => $com,
                    'costCenterId' => $costCenters,
                    'rate' => $request->rate[$key][0],
                    'measurement' => $request->measurement[$key][0],
                    'limit' => $request->limit[$key][0],
                    'duration' => $request->duration[$key][0],
                    'status' => 'Pending',
                    'role' => 'Site-Collector',
                    'siteId' => session('Site_UUID'),
                    'createdBy' => session('UserName'),
                    'sponsorSSOId' => session('SponsorSSOId'),
                ]);
                $isDataInserted = 1;
                $finalDate = changeTimeZone();
                if ($request->limit[$key][0] == null && $request->duration[$key][0] == null) {
                    $previousSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->sum('quantity');
                    $countSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->count('id');
                } else {
                    $finalDate = changeTimeZone()->subdays((int)$request->duration[$key][0]);
                    $finalDate2 = changeTimeZone()->subdays((int)$request->duration[$key][0]);
                    $previousSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->where('created_at', '>=', $finalDate)->sum('quantity');
                    $countSamples = CollectSample::where('subjectId', '=', $request->subjectId)->where('clinicalStudyId', '=', $request->clinicalStudyId)->where('name', '=', $name[0])->where('created_at', '>=', $finalDate2)->count('id');
                }
                if($doesSampleExists == 1){
                    // services APi
                }else{
                    $data['listingParameter'] = array(
                        "sample_collection_uuid" => $collectSample->sampleUuid,
                        "name" => fnEncryptProd($user->first_name . ' ' . $user->last_name),
                        "drawn_date" => Carbon::parse($collectSample->created_at)->format('Y-m-d h:i:s'),
                        "participant_email" => fnEncryptProd($user->email),
                        "erx_id" => $user->erxId,
                        "subject_id" => $participantClinicalStudy->subjectId,
                        "type" => $collectSample->name,
                        "days_elapsed" => $countSamples,
                        "sample_collected" => $previousSamples,
                        "current_sample" => $collectSample->quantity,
                        "description" => "None",
                        "visiting_time" =>Carbon::parse($collectSample->created_at)->format('Y-m-d h:i:s'),
                        "unit" => $collectSample->measurement,
                        "limit" => $collectSample->limit,
                        "duration" => $collectSample->duration,
                        "tenant_code" => $collectSample->sponsorSSOId
                    );
                    $requeste =  curl(config('app.services_url') . strtolower('Site-Collector') . '/collectSample', $data, 'post');
                    $decodedRequest = $requeste;
                }
                $collectSampleID[] = $collectSample->id;
                $template_path = 'collectSample';
                // \Mail::send(['html' => $template_path], [], function ($message) use ($user) {
                //     $message->to($user->email, $user->email)
                //         ->subject('Your Sample Has Been Collected!');
                // });
            }
        }
        foreach ($request->chargesName as $key2 => $charges) {
            if ($charges != null && $request->chargesType[$key2][0] != null && $request->charges[$key2][0] != null) {
                $anillaryCharges = AncillaryCharge::create([
                    'subjectId' => $request->subjectId,
                    'clinicalStudyId' => $request->clinicalStudyId,
                    'visitId' => $visit->id,
                    'costCenterId' => $costCenters,
                    'name' => $charges[0],
                    'type' => $request->chargesType[$key2][0],
                    'rate' => $request->charges[$key2][0],
                    'status' => 'Pending',
                    'role' => 'Site-Collector',
                    'siteId' => session('Site_UUID'),
                    'sponsorSSOId' => session('SponsorSSOId'),
                    'createdBy' => session('UserName'),
                ]);
                $AncillaryChargeID[] = $anillaryCharges->id;
            }
        }
        foreach ($collectSampleID as $key => $sampleID) {
            foreach ($AncillaryChargeID as $key => $chargeID) {
                $pivot = SampleAncillaryCharges::create([
                    'collectSampleId' => $sampleID,
                    'ancillaryChargesId' => $chargeID,
                ]);
            }
        }
        if (isset($request->comment)) {
            $comment = Comment::create([
                'comment' => $request->comment,
                'model' => 'App\Models\CollectSample',
                'modelID' => $id,
                'role' => session('Role'),
                'sponsorSSOId' => session('SponsorSSOId'),
                'createdBy' => session('UserName'),
            ]);
        }
        $visit->save();
        return redirect('record_sample')->with('success', 'Sample Updated Successfully');
    }
    public function confirmVisitData($id)
    {
        // return $id;
        $visit = Visit::find($id);
        $collectSample = CollectSample::where('visitid','=',$id)->first();
        $finalDate = changeTimeZone();
        if (isset($collectSample)) {
            $collectSample->actionDate = $finalDate;
            $collectSample->actionBy = session('UserName');
            $collectSample->status = 'Approved';
            $collectSample->save();
            $payment = Payment::create([
                'token' => getUUID(),
                'visitId' => $collectSample->visitId,
                'clinicalStudyId' => $collectSample->clinicalStudyId,
                'type' => 'SampleCharges',
                'typeId' => $collectSample->id,
                'subjectId' => $collectSample->subjectId,
                'amount' => $collectSample->rate,
                'uniqueVisitId' => $visit->visitId,
                'costCenterId' => $collectSample->costCenterId,
                'status' => 'Pending',
                'siteId' => $collectSample->siteId,
                'role' => 'Site-Collector',
                'sponsorSSOId' => session('SponsorSSOId'),
                'createdBy' => session('UserName'),
            ]);
        }
                $anillaryCharges = AncillaryCharge::where('visitId','=',$id)->get();
                foreach($anillaryCharges as $single){
                    $finalDate = changeTimeZone();
                    $single->actionDate = $finalDate;
                    $single->actionBy = session('UserName');
                    $single->status = 'Approved';
                    $single->save();
                    $payment = Payment::create([
                        'token' => getUUID(),
                        'visitId' => $single->visitId,
                        'type' => 'ancillaryCharges',
                        'uniqueVisitId' => $visit->visitId,
                        'typeId' => $single->id,
                        'visitId' => $single->visitId,
                        'subjectId' => $single->subjectId,
                        'clinicalStudyId' => $single->clinicalStudyId,
                        'amount' => $single->rate,
                        'costCenterId' => $single->costCenterId,
                        'status' => 'Pending',
                        'siteId' => $single->siteId,
                        'role' => 'Site-Collector',
                        'sponsorSSOId' => session('SponsorSSOId'),
                        'createdBy' => session('UserName'),
                    ]);
                }
                $visit->sampleStatus = 'Confirm';
                $visit->save();
                return redirect('record_sample');

    }
}
