HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/AdminMasterController.php
<?php

namespace App\Http\Controllers\Api;

use App\Allergie;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminMasterRequest;
use App\Http\Requests\AdminListItemUpdateRequest;
use App\Library\VariableLibrary;
use App\Library\FcmLibrary;
use App\MedicalCondition;
use App\Medication;
use App\Procedure;
use App\Vaccination;
use App\Symptom;
use App\Clinic;
use Illuminate\Support\Facades\Validator;
use App\UserDetails;
use Illuminate\Validation\Rule;
use App\UserSettingsNotification;
use App\UserAreaSpecialisation;
use App\AdminSettings;
use App\Lab;
use App\Language;
use App\DoctorSymptomTemplates;
use App\Jobs\SendEmailNotificationJob;
use App\UserClinic;
use App\User;
use Auth;
use DB;
use Exception;
use DateTime;
use Config;
use Illuminate\Support\Facades\Mail;
use App\Mail\AccountApprove;
use App\Jobs\AccountApproveJob;
use Illuminate\Support\Facades\Hash;
use App\Library\S3Library;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Throwable;
use Illuminate\Support\Carbon;
use App\Http\Resources\ListItemsCollection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use App\DoctorSymptoms;
use App\Http\Requests\AddTemplateRequest;
use App\Http\Requests\EditTemplateRequest;
use App\Http\Requests\DeleteTemplateRequest;
use App\EmailTemplate;
use App\Http\Requests\AddEmailTemplateRequest;
use App\Http\Requests\EditEmailTemplateRequest;
use App\Http\Requests\DeleteEmailTemplateRequest;
// use App\TreatmentGiven;
// use App\Http\Requests\AddTreatmentGivenRequest;
// use App\Http\Requests\EditTreatmentGivenRequest;
// use App\Http\Requests\DeleteTreatmentGivenRequest;
use App\CMSPage;
use App\Http\Requests\AddCMSPageRequest;
use App\Http\Requests\EditCMSPageRequest;
use App\Http\Requests\DeleteCMSPageRequest;
use App\Http\Requests\Master\StatusUpdateRequest;

class AdminMasterController extends Controller
{
    public function index(Request $request) {
       
        try {
            $pageNumber = $request->page ? $request->page : 1;
            $perPage = $request->perPage ? $request->perPage : 10;
            $search_key = $request->search ? $request->search : '';
            $all = new Collection([]);

            
            $authRole = Auth::user();
            $auth_id = auth()->user()->id;

            if(!empty($search_key)) {
                $Clinic = collect(
                    Clinic::where('name', 'LIKE', "%{$search_key}%")
                        ->orWhereHas('owner', function ($query) use ($search_key) {
                            $query->where('email', 'LIKE', "%{$search_key}%")
                                  ->orWhere('first_name', 'LIKE', "%{$search_key}%")
                                  ->orWhere('last_name', 'LIKE', "%{$search_key}%")
                                  ->orWhere('mobile_number', 'LIKE', "%{$search_key}%")
                                  ->orWhere('address', 'LIKE', "%{$search_key}%")
                                  ->orWhere('post_code', 'LIKE', "%{$search_key}%");
                        })
                        ->get()
                        ->map(function ($item) {
                            $item->type = 'Clinics';
                            return $item;
                        })
                );

                $Lab = collect(
                    /*Lab::where('name', 'LIKE', "%{$search_key}%")
                        ->get()
                        ->map(function ($item) {
                            $item->type = 'Labs';
                            return $item;
                        })*/
                        Lab::join('users', 'labs.user_id', '=', 'users.id')
                        ->where('labs.name', 'LIKE', "%{$search_key}%")
                        ->orWhere('users.mobile_number', 'LIKE', "%{$search_key}%")
                        ->orWhere('users.address', 'LIKE', "%{$search_key}%")
                        ->orWhere('users.post_code', 'LIKE', "%{$search_key}%")
                        ->get()
                        ->map(function ($item) {
                            $item->type = 'Labs';
                            return $item;
                        })
                );

                $Symptom = collect(Symptom::where('symptoms_name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Symptoms';return $item;}));
                $Allergie = collect(Allergie::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Allergies';return $item;}));
                $MedicalCondition = collect(MedicalCondition::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Medical Conditions';return $item;}));
                $Medication = collect(Medication::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Medications';return $item;}));
                $Procedure = collect(Procedure::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Procedures';return $item;}));
                $Vaccination = collect(Vaccination::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Vaccinations';return $item;}));
                $SymptomTemplates = collect(DoctorSymptomTemplates::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Symptom Templates';return $item;}));
            } else {
                if($authRole->type == "doctor"){
                    //get user detail id
                    $userDetailId = UserDetails::select('id')->where('user_id',$auth_id)->first();
                    //get User-clinic ids
                    $userClinicId = UserClinic::where('user_detail_id',$userDetailId->id)->distinct()->pluck('clinic_id')->toArray();
                    //get clinic list
                    $Clinic = collect(Clinic::with('clinicImages')->whereIn('id',$userClinicId)->get()->map(function($item){ $item->type = 'Clinics'; return $item; }));
                   
                } else{
                    $Clinic = collect(Clinic::with('clinicImages')->get()->map(function($item){ $item->type = 'Clinics'; return $item; }));
                }
                $Lab = collect(Lab::get()->map(function($item){ $item->type = 'Labs'; return $item; }));
                $Symptom = collect(Symptom::get()->map(function($item){ $item->type = 'Symptoms'; return $item; }));
                $Allergie = collect(Allergie::get()->map(function($item){ $item->type = 'Allergies'; return $item; }));
                $MedicalCondition = collect(MedicalCondition::get()->map(function($item){ $item->type = 'Medical Conditions'; return $item; }));
                $Medication = collect(Medication::get()->map(function($item){ $item->type = 'Medications'; return $item; }));
                $Procedure = collect(Procedure::get()->map(function($item){ $item->type = 'Procedures'; return $item; }));
                $Vaccination = collect(Vaccination::get()->map(function($item){ $item->type = 'Vaccinations'; return $item; }));
                $SymptomTemplates = collect(DoctorSymptomTemplates::get()->map(function($item){ $item->type = 'Symptom Templates'; return $item; }));
            }

            if(!empty($request->type)) {
                
                $typeArr = explode(',', $request->type);
                if(in_array('Clinics', $typeArr))
                    $all = $all->merge($Clinic->toArray());
                if(in_array('Labs', $typeArr)) // Added for Labs
                    $all = $all->merge($Lab->toArray());
                if(in_array('Symptoms', $typeArr))
                    $all = $all->merge($Symptom->toArray());
                if(in_array('Allergies', $typeArr))
                    $all = $all->merge($Allergie->toArray());
                if(in_array('Medical Conditions', $typeArr))
                    $all = $all->merge($MedicalCondition->toArray());
                if(in_array('Medications', $typeArr))
                    $all = $all->merge($Medication->toArray());
                if(in_array('Procedures', $typeArr))
                    $all = $all->merge($Procedure->toArray());
                if(in_array('Vaccinations', $typeArr))
                    $all = $all->merge($Vaccination->toArray());
                if(in_array('Symptom Templates', $typeArr))
                    $all = $all->merge($SymptomTemplates->toArray());
            } else {
                $all = $all->merge($Clinic->toArray())
                           ->merge($Lab->toArray()) // Merging Lab records
                           ->merge($Symptom->toArray())
                           ->merge($Allergie->toArray())
                           ->merge($MedicalCondition->toArray())
                           ->merge($Medication->toArray())
                           ->merge($Procedure->toArray())
                           ->merge($Vaccination->toArray());
            }

            $all = $all->sortByDesc('created_at')->values()->all();

            $page = $pageNumber ?: (Paginator::resolveCurrentPage() ?: $pageNumber);
            $items = $all instanceof Collection ? $all : Collection::make($all);
            $data = new LengthAwarePaginator(array_values($items->forPage($pageNumber, $perPage)->toArray()), $items->count(), $perPage, $pageNumber, $options=[]);
            $result['list'] = $data->items();
            $result['total_count'] = $data->total();
            $result['last_page'] = $data->lastPage();
            $result['current_page'] = $data->currentPage();

            return self::sentResponse(200, $result, __('digimed_validation.success_response.data_fetch_success'));
        }
        catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }



    public function addEdit(AdminMasterRequest $request, VariableLibrary $variableLibrary)
    {

        $validated = $request->validated();
        try {
                // dd($request->clinic_id);
            $authRole = Auth::user();
            $auth_id = auth()->user()->id;

            $name = ucfirst(strtolower($variableLibrary->string($request->name)));
            $type = $request->type;
            DB::beginTransaction();
            $nameExplode = explode(',', $name);
            $query = '';
            $queryData = '';
            $mail = '';
            if (count($nameExplode) != false) {
                for ($i = 0; $i < count($nameExplode); $i++) {
                    if ($type == 'allergies') {
                        $query = new Allergie;
                    } elseif ($type == 'medical_conditions') {
                        $query = new MedicalCondition;
                    } elseif ($type == 'medications') {
                        $query = new Medication;
                    } elseif ($type == 'procedures') {
                        $query = new Procedure;
                    } elseif ($type == 'vaccinations') {
                        $query = new Vaccination;
                    } elseif ($type == 'clinics') {
                        $query = new Clinic;
                    } elseif ($type == 'lab') {
                        $query = new Lab;
                    }
                    elseif ($type == 'symptoms') {
                        $query = new Symptom;
                    } elseif ($type == 'treatment_given') {
                        $query = new TreatmentGiven;
                    } elseif ($type == 'symptom_templates') {
                        $query = new DoctorSymptomTemplates;
                    }
                    if ($type == 'symptoms')
                        $queryBuilder = $query->where('symptoms_name', $nameExplode[$i])->first();
                    else
                        $queryBuilder = $query->where('name', $nameExplode[$i])->first();

                    if ($queryBuilder != '') {
                    } else {
                        if ($type == 'symptoms')
                            $query->symptoms_name = $nameExplode[$i];
                        elseif ($type == 'symptom_templates') {
                            $query->name = $nameExplode[$i];
                            $query->additional_fields = 1;
                        } elseif ($type == 'clinics') {
                            $user = User::firstOrNew([
                                'mobile_number' => $request->mobile_number
                            ]);
                            $user->type = 'clinic_admin';
                            $user->first_name = $request->first_name;
                            $user->last_name = $request->last_name;
                            $user->passport_number = '123ABC';
                            $user->email = $request->email;
                            $user->is_mobile_number_verified = '1';
                            $user->email_verification_code = '123456';
                            $user->is_email_verified = '1';
                            $user->two_step_verification_type = '2';
                            $user->is_two_step_verified = '1';
                            $user->is_email_verified = '1';
                            $user->country_code = $request->country_code;
                            $user->country_id = $request->country_id;
                            $user->post_code = $request->post_code;
                            $user->address = $request->address;
                            $user->password = Hash::make($request->password);
                            $user->status = '2';
                            $user->user_completion = '6';
                            $user->created_by = $auth_id;
                            $user->save();
                            $user->assignRole('clinic_admin');
                            $query->name = $nameExplode[$i];
                            $query->user_id = $user->id;
                            $mail = '1';
                        } elseif ($type == 'lab') {
                            $user = User::firstOrNew([
                                'email' => $request->email
                            ]);

                            $user->type = 'lab_admin';
                            $user->first_name = $request->first_name;
                            $user->last_name = $request->last_name;
                            $user->passport_number = '123ABC';
                            $user->mobile_number = $request->mobile_number;
                            $user->is_mobile_number_verified = '1';
                            $user->email_verification_code = '123456';
                            $user->is_email_verified = '1';
                            $user->two_step_verification_type = '2';
                            $user->is_two_step_verified = '1';
                            $user->country_code = $request->country_code;
                            $user->country_id = $request->country_id;
                            $user->post_code = $request->post_code;
                            $user->address = $request->address;
                            $user->password = Hash::make($request->password);
                            $user->status = '2';
                            $user->user_completion = '6';
                            $user->created_by = $auth_id;
                            $user->save();
                            $user->assignRole('lab_admin');

                            // Store lab record with clinic_id
                            $query->name = $nameExplode[$i];
                            $query->user_id = $user->id;
                            $query->clinic_id = $request->clinic_id; // Ensure clinic_id is set correctly
                            $query->status = '1'; 
                            $mail = '2';
                        }
                         else {
                            $query->name = $nameExplode[$i];

                        }
                        $query->created_by = $auth_id;
                        $query->updated_by = $auth_id;
                        $query->save();
                    }
                }
            }
            DB::commit();
            if(!empty($mail)) {
                if($mail == '1') { // Clinic account mail
                    $login_link = Config::get('custom.login_link').'/hospital/login';
                    // Mail
                    $mailBody = [
                        'email' => $request->email,
                        'body' => [
                            'content' => 'Your '.config('app.name').' hospital account has been created by the Admin. Your mail_id is : '.$request->email.' and your password is : '.$request->password.'. Please click the below link to login.',
                            'link_name' => 'Click here to login...',
                            'login_link' => $login_link,
                        ],
                        'subject' => 'Account approval invitation - Hospital',
                    ];
                    dispatch(new AccountApproveJob($mailBody));
                } elseif($mail == '2') { // Lab account mail
                    $login_link = Config::get('custom.login_link').'/lab/login';
                    // Mail
                    $mailBody = [
                        'email' => $request->email,
                        'body' => [
                            'content' => 'Your '.config('app.name').' lab account has been created by the Admin. Your mail_id is : '.$request->email.' and your password is : '.$request->password.'. Please click the below link to login.',
                            'link_name' => 'Click here to login...',
                            'login_link' => $login_link,
                        ],
                        'subject' => 'Account approval invitation - Lab',
                    ];
                    dispatch(new AccountApproveJob($mailBody));
                }
            }

            if ($type == 'allergies') {
                $queryData = new Allergie;
                $message = __('Allergy').' '.__('added_updated_success');
            } elseif ($type == 'medical_conditions') {
                $queryData = new MedicalCondition;
                $message = __('Medical Condition').' '.__('added_updated_success');
            } elseif ($type == 'medications') {
                $queryData = new Medication;
                $message = __('Medication').' '.__('added_updated_success');
            } elseif ($type == 'procedures') {
                $queryData = new Procedure;
                $message = __('Procedure').' '.__('added_updated_success');
            } elseif ($type == 'vaccinations') {
                $queryData = new Vaccination;
                $message = __('Vaccination').' '.__('added_updated_success');
            } elseif ($type == 'clinics') {
                $queryData = new Clinic;
                $message = __('Hospital').' '.__('added_updated_success');
            } elseif ($type == 'lab') {
                $queryData = new Lab;
                $message = __('Lab').' '.__('added_updated_success');
            }  elseif ($type == 'symptoms') {
                $queryData = new Symptom;
                $message = __('Symptom').' '.__('added_updated_success');
            } elseif ($type == 'treatment_given') {
                $queryData = new TreatmentGiven;
                $message = __('Treatment Given').' '.__('added_updated_success');
            } elseif ($type == 'symptom_templates') {
                $queryData = new DoctorSymptomTemplates;
                $message = __('System Template').' '.__('added_updated_success');
            }

            return self::sentResponse(200, ['data' => $queryData->get()],$message);
        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();

            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function listItems(Request $request)
    {
        try
        {
            $list = [
                // [
                //     "name" => "Clinics",
                //     "value" => 'clinics'
                // ],
                [
                    "name" => "Symptoms",
                    "value" => 'symptoms'
                ],
                [
                    "name" => "Allergies",
                    "value" => 'allergies'
                ],
                [
                    "name" => "Medical Conditions",
                    "value" => 'medical_conditions'
                ],
                [
                    "name" => "Medications",
                    "value" => 'medications'
                ],
                [
                    "name" => "Procedures",
                    "value" => 'procedures'
                ],
                [
                    "name" => "Vaccinations",
                    "value" => 'vaccinations'
                ],
                // [
                //     "name" => "Treatment Given",
                //     "value" => 'treatment_given'
                // ]
            ];

            return self::sentResponse(200, $list, __('digimed_validation.success_response.data_fetch_success'));
        }
        catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function save(AdminListItemUpdateRequest $request, VariableLibrary $variableLibrary)
    {
        $validated = $request->validated();
        try {
            $authRole = Auth::user();
            $auth_id = auth()->user()->id;

            $name = ucfirst(strtolower($variableLibrary->string($request->name)));
            $type = $request->type;
            $id = $request->id;
            $action = $request->action;
            DB::beginTransaction();
            $nameExplode = explode(',', $name);
            $queryData = '';

            if (count($nameExplode) != false) {
                for ($i = 0; $i < count($nameExplode); $i++) {
                    if ($type == 'allergies') {
                        $queryBuilder = Allergie::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'medical_conditions') {
                        $queryBuilder = MedicalCondition::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'medications') {
                        $queryBuilder = Medication::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'procedures') {
                        $queryBuilder = Procedure::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'vaccinations') {
                        $queryBuilder = Vaccination::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'clinics') {
                        $queryBuilder = Clinic::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $user = User::find($queryBuilder->user_id);
                            $user->first_name = $request->first_name;
                            $user->last_name = $request->last_name;
                            $user->email = $request->email;
                            $user->mobile_number = $request->mobile_number;
                            $user->country_code = $request->country_code;
                            $user->country_id = $request->country_id;
                            $user->post_code = $request->post_code;
                            $user->address = $request->address;
                            $user->save();
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $clinic = UserClinic::where('clinic_id', $id)->count();
                                if ($clinic == 0) {
                                    $queryBuilder->deleted_by = $auth_id;
                                    $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                                } else {
                                    return self::sentResponse(200, [], __('digimed_validation.error_response.user_clinic_exist'));
                                }
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'labs') {
                        $queryBuilder = Lab::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->clinic_id = $request->clinic_id;
                            $user = User::find($queryBuilder->user_id);
                            $user->first_name = $request->first_name;
                            $user->last_name = $request->last_name;
                            $user->email = $request->email;
                            $user->mobile_number = $request->mobile_number;
                            $user->country_code = $request->country_code;
                            $user->country_id = $request->country_id;
                            $user->post_code = $request->post_code;
                            $user->address = $request->address;
                            $user->save();
                            if (isset($request->status)) {
                                $queryBuilder->status = $request->status;
                            }
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {

                                    $queryBuilder->deleted_by = $auth_id;
                                    $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");

                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'treatment_given') {
                        $queryBuilder = TreatmentGiven::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'symptoms') {
                        $queryBuilder = Symptom::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->symptoms_name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                            }
                            $queryBuilder->save();
                        }
                    } elseif ($type == 'symptom_templates') {
                        $queryBuilder = DoctorSymptomTemplates::where('id', $id)->first();
                        if ($queryBuilder) {
                            $queryBuilder->name = $nameExplode[$i];
                            $queryBuilder->created_by = $auth_id;
                            $queryBuilder->updated_by = $auth_id;
                            if ($action == 2) {
                                $queryBuilder->deleted_by = $auth_id;
                                $queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
                                DB::table('doctor_symptoms')->where('template_id', $id)
                                    ->update(['deleted_by' => $auth_id, 'deleted_at' => Carbon::now()->format("Y-m-d H:i:s")]);
                            }
                            $queryBuilder->save();
                        }
                    }
                }
            }
            DB::commit();

            if ($type == 'allergies') {
                $queryData = new Allergie;
            } elseif ($type == 'medical_conditions') {
                $queryData = new MedicalCondition;
            } elseif ($type == 'medications') {
                $queryData = new Medication;
            } elseif ($type == 'procedures') {
                $queryData = new Procedure;
            } elseif ($type == 'vaccinations') {
                $queryData = new Vaccination;
            } elseif ($type == 'clinics') {
                $queryData = new Clinic;
            } elseif ($type == 'labs') {
                $queryData = new Lab;
            } elseif ($type == 'symptoms') {
                $queryData = new Symptom;
            } elseif ($type == 'treatment_given') {
                $queryData = new TreatmentGiven;
            } elseif ($type == 'symptom_templates') {
                $queryData = new DoctorSymptomTemplates;
            }

            if ($action == 2)
                return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
            else
                return self::sentResponse(200, ['data' => $queryData->get()], __('digimed_validation.success_response.data_update_success'));

        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function updateStatus(StatusUpdateRequest $request)
    {
        try {
            if($request->module == 'clinic') {
                $clinic = Clinic::find($request->id);
                $clinic->status = $request->status;
                $clinic->save();
            }
            if($request->module == 'pharmacy') {
                $pharmacy = Pharmacy::find($request->id);
                $pharmacy->status = $request->status;
                $pharmacy->save();
            }
            if($request->module == 'lab') {
                $lab = Lab::find($request->id);
                $lab->status = $request->status;
                $lab->save();
            }
            if($request->module == 'speciality') {
                $lab = AreaSpecialisation::find($request->id);
                $lab->status = $request->status;
                $lab->save();
            }
            if($request->module == 'category') {
                $category = Category::find($request->id);
                $category->status = $request->status;
                $category->save();
            }
            if($request->module == 'sub_category') {
                $sub_category = SubCategory::find($request->id);
                $sub_category->status = $request->status;
                $sub_category->save();
            }
            if($request->module == 'blog') {
                $blog = Blog::find($request->id);
                $blog->status = $request->status;
                $blog->save();
            }
            if($request->module == 'coupon') {
                $blog = Coupon::find($request->id);
                $blog->status = $request->status;
                $blog->save();
            }
            if($request->module == 'rating') {
                $rating = Rating::find($request->id);
                $rating->status = $request->status;
                $rating->save();
            }
            if($request->module == 'practitioner_category') {
                $practitionerCategory = PractitionerCategory::find($request->id);
                $practitionerCategory->status = $request->status;
                $practitionerCategory->save();
            }
            if($request->module == 'practitioner_availability_type') {
                $practitionerAvailabilityType = PractitionerAvailabilityType::find($request->id);
                $practitionerAvailabilityType->status = $request->status;
                $practitionerAvailabilityType->save();
            }
            if($request->module == 'allergies') {
                $allergie = Allergie::find($request->id);
                $allergie->status = $request->status;
                $allergie->save();
            }
            if($request->module == 'medical_conditions') {
                $medicalCondition = MedicalCondition::find($request->id);
                $medicalCondition->status = $request->status;
                $medicalCondition->save();
            }
            if($request->module == 'medications') {
                $medication = Medication::find($request->id);
                $medication->status = $request->status;
                $medication->save();
            }
            if($request->module == 'procedures') {
                $procedure = Procedure::find($request->id);
                $procedure->status = $request->status;
                $procedure->save();
            }
            if($request->module == 'vaccinations') {
                $vaccination = Vaccination::find($request->id);
                $vaccination->status = $request->status;
                $vaccination->save();
            }
            if($request->module == 'symptoms') {
                $symptom = Symptom::find($request->id);
                $symptom->status = $request->status;
                $symptom->save();
            }
            if($request->module == 'languages') {
                $language = Language::find($request->id);
                $language->is_enable = $request->status;
                $language->save();
            }
            if($request->module == 'health_profile') {
                $language = HealthProfileMaster::find($request->id);
                $language->status = $request->status;
                $language->save();
            }
            if($request->module == 'health_profile_metrics') {
                $language = HealthProfileMetrics::find($request->id);
                $language->status = $request->status;
                $language->save();
            }
            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //lab list
    public function labindex(Request $request) {
        try {
            $limit = $request->limit ? $request->limit : '';
            $lab = Lab::where('status','1');
            if(!empty($limit)) {
                $lab = $lab->orderBy('id', 'desc');
                $lab = $lab->limit($limit);
            }
            $lab = $lab->get();
            return self::sentResponse(200, $lab, __('digimed_validation.success_response.data_fetch_success'));
        }
        catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }




    // public function myIndex(){
    //     $fcmLibrary = new \App\Library\FcmLibrary;
    //     $response = ($fcmLibrary->sendNotification([1,2,3],'test','test body'));
    //     return $response;
    // }
    // public function healthCommand(Request $request){
    //     $current_date = Carbon::now()->format('m-d');
    //     $users = \App\User::where('status','2')->get();
    //     if(count($users) != 0){
    //         foreach ($users as $key => $value) {
    //             $user_created = Carbon::parse($value->created_at)->format('m-d');
    //             if($current_date == $user_created){
    //                 $fcmLibrary = new \App\Library\FcmLibrary;
    //                 $response = ($fcmLibrary->sendNotification([$value->id],'Health Profile Reminder','Kindly review and update your health profile.'));
    //             }
    //         }
    //     }
    // }
    // public function AppointmentNotification(Request $request){
    //     $time_limit = Config::get('pusher.notification_reminder_time_limit');
    //     $date = new DateTime;
    //     $date->modify('+'.$time_limit.' minutes');
    //     $formatted_date = $date->format('Y-m-d H:i');
    //     // dd($formatted_date);
    //     $appointments = \App\Appointment::where('appointment_status','ACCEPTED')
    //                 ->where('appointment_start_dt', '<' , $formatted_date)
    //                 ->get();
    //     if(count($appointments) != 0){
    //         foreach ($appointments as $key => $value) {
    //             $user_id = $value->patient_id;
    //             $notifications = \App\User::with(['notificationSettings'])->find($user_id);
    //             $enable_push_notification = $notifications->notificationSettings->reminders_push;
    //             if($enable_push_notification == 1)
    //             {
    //                 if (Config::get('pusher.fcm_enabled'))
    //                 {
    //                     $fcmLibrary = new \App\Library\FcmLibrary;
    //                     $response = ($fcmLibrary->sendNotification([$value->id],'Appointment will start soon','Your appointment '.$value->consultation_id.' will start soon.'));
    //                 }
    //             }
    //         }
    //     }
    // }

    //add edit doctor
//     public function addEditDoctor(Request $request, VariableLibrary $variableLibrary)
//     {
//     try {
//         $authRole = Auth::user();
//         $auth_id = $authRole->id;

//         // Validate input
//         $request->validate([
//             'mobile_number' => 'required|string|unique:users,mobile_number,' . $request->id,
//             'email' => 'required|email|unique:users,email,' . $request->id,
//             'password' => 'required_if:id,null|min:6',
//         ]);

//         // Transform input
//         $first_name = ucfirst(strtolower($variableLibrary->string($request->first_name)));
//         $last_name = ucfirst(strtolower($variableLibrary->string($request->last_name)));

//         // Begin transaction
//         DB::beginTransaction();

//         // Create or update user
//         $user = User::firstOrNew(['mobile_number' => $request->mobile_number]);
//         $user->type = 'doctor';
//         $user->first_name = $first_name;
//         $user->last_name = $last_name;
//         $user->passport_number = $request->passport_number ?? '123ABC'; // Default value
//         $user->email = $request->email;
//         $user->is_mobile_number_verified = '1';
//         $user->email_verification_code = '123456';
//         $user->is_email_verified = '1';
//         $user->two_step_verification_type = '2';
//         $user->is_two_step_verified = '1';
//         $user->country_code = $request->country_code;
//         $user->country_id = $request->country_id;
//         $user->post_code = $request->post_code;
//         $user->address = $request->address;
//         $user->password = Hash::make($request->password);
//         $user->status = '1';
//         $user->user_completion = '3';
//         $user->created_by = $auth_id;
//         $user->updated_by = $auth_id;
//         $user->save();
//         $user->assignRole('doctor');

//         DB::commit();

//         // Send account creation email
//         $login_link = Config::get('custom.login_link') . '/doctor/login';
//         $mailBody = [
//             'email' => $request->email,
//             'body' => [
//                 'content' => 'Your '.config('app.name').' Doctor account has been created by the Hospital (' . $authRole->first_name . " " . $authRole->last_name . "). Your Mail ID is : " . $request->email . " and your Password is : " . $request->password . ". Please click the below link to login.",
//                 'link_name' => 'Click here to login...',
//                 'login_link' => $login_link,
//             ],
//             'subject' => 'Account approval invitation - Doctor',
//         ];
//         dispatch(new AccountApproveJob($mailBody));

//         $message = "Doctor added/updated successfully";
//         return self::sentResponse(200, ['data' => $user], $message);
//     } catch (Exception | Throwable | QueryException $e) {
//         DB::rollback();
//         return self::sentResponse(500, [], $e->getMessage());
//     }
// }

//Add doctor in clinic
    public function addDoctor(Request $request) {
    try {
        $rules = [               
            'first_name'  => 'required|string|max:86',
            'last_name'  => 'required|string|max:86',
            'dob' => 'required|date',
            'country_code' => 'required',
            'mobile_number' => 'required|string|max:20',
            'address' => 'required',
            'password' => [
                'required',
                'string',
                'min:8', // Minimum 8 characters
                'regex:/[a-z]/', // At least one lowercase letter
                'regex:/[A-Z]/', // At least one uppercase letter
                'regex:/[0-9]/', // At least one digit
                'regex:/[@$!%*#?&]/', // At least one special character
            ],
            'medical_license_number' => 'required|max:100',
            'reg_no' => 'required',
            'specialization' => 'required',
            // 'clinic_id' => 'required',
            'email' => [
                'required',
                'email',
                Rule::unique('users', 'email')->ignore($request->user_id)
            ],
            'gender' => 'required'
        ];
        $messages = [
            'first_name.required' => __('digimed_validation.form_validation_error.first_name_required'),
            'first_name.string' => __('digimed_validation.form_validation_error.first_name_string'),
            'first_name.max' => __('digimed_validation.form_validation_error.first_name_max'),
        
            'last_name.required' => __('digimed_validation.form_validation_error.last_name_required'),
            'last_name.string' => __('digimed_validation.form_validation_error.last_name_string'),
            'last_name.max' => __('digimed_validation.form_validation_error.last_name_max'),
        
            'dob.required' => __('digimed_validation.form_validation_error.dob_required'),
            'dob.date' => __('digimed_validation.form_validation_error.dob_date'),
        
            'country_code.required' => __('digimed_validation.form_validation_error.country_code_required'),
            'mobile_number.required' => __('digimed_validation.form_validation_error.mobile_number_required'),
            'mobile_number.string' => __('digimed_validation.form_validation_error.mobile_number_string'),
            'mobile_number.max' => __('digimed_validation.form_validation_error.mobile_number_max'),
        
            'address.required' => __('digimed_validation.form_validation_error.address_required'),
        
            'password.required' => __('digimed_validation.form_validation_error.password_required'),
        
            'medical_license_number.required' => __('digimed_validation.form_validation_error.medical_license_number_required'),
            'medical_license_number.max' => __('digimed_validation.form_validation_error.medical_license_number_max'),
        
            'reg_no.required' => __('digimed_validation.form_validation_error.reg_no_required'),
        
            'specialization.required' => __('digimed_validation.form_validation_error.specialization_required'),
        
            'clinic_id.required' => __('digimed_validation.form_validation_error.clinic_id_required'),
        
            'email.required' => __('digimed_validation.form_validation_error.email_required'),
            'email.email' => __('digimed_validation.form_validation_error.email_format'),
        
            'gender.required' => __('digimed_validation.form_validation_error.gender_required'),
        ];
        
        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()) {
            return self::sentResponse(422, [], $validator->errors()->first()); 
        } 
       

        $auth_id = auth()->user()->id;
        $authRole = Auth::user();
        DB::beginTransaction();
       
        $data_dob = $request->dob;
        $user = new User();
        /** @var string $data_dob */
        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->gender = $request->gender;
        $user->email = $request->email;
        $user->region = $request->region;
        $user->type = 'doctor';
        $user->dob = date('Y-m-d', strtotime(str_replace('/', '-', $data_dob)));
        $user->country_id = $request->country_code;
        $user->mobile_number = $request->mobile_number;
        $user->is_email_verified = '0';
        $user->two_step_verification_type = '2';
        $user->is_two_step_verified = '0';
        $user->address = $request->address;
        $user->password = Hash::make($request->password);
        $user->status = '1';
        $user->user_completion = '3';
        // New fields for personal and professional details
        $user->medical_license_number = $request->medical_license_number;
        if($user->save()) {
            $user->assignRole('doctor');
            // $roleId = $request->type === 'patient' ? 4 : 3;
            // DB::table('model_has_roles')->insert([
            //     'role_id' => $roleId,
            //     'model_type' => "App\User",
            //     'model_id' => $user->id,
            // ]);
            $notification = UserSettingsNotification::firstOrNew(['user_id' => $user->id]);
            $notification->reminders_email ="1";
            $notification->reminders_inapp = "1";
            $notification->reminders_push = "1";
            $notification->appt_confirm_changes_email = "1";
            $notification->appt_confirm_changes_inapp = "1";
            $notification->appt_confirm_changes_push ="1";
            $notification->updated_by = $auth_id;
            $notification->save();

            $userdetails = UserDetails::firstOrNew(['user_id' => $user->id]);
            $userdetails->medical_council_regno = $request->reg_no;
            $userdetails->created_by = $auth_id;
            $userdetails->save();
            $lastDetailID = $userdetails->id;

            $data_specilation = $request->specialization;
            /** @var string $data_specilation */
            if ($data_specilation != "") {
                $queryDelete = new UserAreaSpecialisation();
                $querySpecilation = $queryDelete->where('user_detail_id', $lastDetailID);
                if ($querySpecilation->count() > 0) {
                    $querySpecilation->update(['deleted_by' => $auth_id]);
                    $querySpecilation->delete();
                }
                $areaSpecialisationExplode = explode(',', $data_specilation);
                for ($i = 0; $i < count($areaSpecialisationExplode); $i++) {
                    $query = new UserAreaSpecialisation();
                    $query->user_detail_id = $lastDetailID;
                    $query->area_specialisation_id = $areaSpecialisationExplode[$i];
                    $query->created_by = $auth_id;
                    $query->save();
            }
        }

        //fetch clinic id
        $clinicID = Clinic::where('user_id', $auth_id)->first();
        $data_clinic = $clinicID->id;
        /** @var string $data_clinic */
        if ($data_clinic != "") {
            $queryDelete = new UserClinic();
            $queryUserClinic = $queryDelete->where('user_detail_id', $lastDetailID);
            if ($queryUserClinic->count() > 0) {
                $queryUserClinic->update(['deleted_by' => $auth_id]);
                $queryUserClinic->delete();
            }

            $clinicExplode = explode(',', $data_clinic);
            for ($i = 0; $i < count($clinicExplode); $i++) {
                $queryUserClinic = new UserClinic();
                $queryUserClinic->user_detail_id = $lastDetailID;
                $queryUserClinic->clinic_id = $clinicExplode[$i];
                $queryUserClinic->created_by = $auth_id;
                $queryUserClinic->save();
            }
            }
        }

        //Send account creation email
        $login_link = Config::get('custom.login_link') . 'doctor/login';
        $mailBody = [
            'email' => $request->email,
            'body' => [
                'content' => 'Your '.config('app.name').' Doctor account has been created by the Hospital (' . $authRole->first_name . " " . $authRole->last_name . "). Your Mail ID is : " . $request->email . " and your Password is : " . $request->password . ". Please click the below link to login.",
                'link_name' => 'Click here to login...',
                'login_link' => $login_link,
            ],
            'subject' => 'Account approval invitation - Doctor',
        ];
        dispatch(new AccountApproveJob($mailBody));



        $adminEmail = AdminSettings::select('email_username')->first();
        $emailUsername = $adminEmail ? $adminEmail->email_username : null;
        $mailBody = [
            'email' => $emailUsername,
            'body' => [
                'content' => 'A new registration request has been submitted by ' . $user->name . '. Please review and approve or reject the request.',
            ],
            'subject' => 'New Registration Request'
        ];
        dispatch(new SendEmailNotificationJob($mailBody));

        DB::commit();

        return self::sentResponse(200, [], __('digimed_validation.success_response.doctor_profile_details_store_success'));
    } catch (Exception | Throwable | QueryException $e) {
        DB::rollback();
        return self::sentResponse(500, [], $e->getMessage());
    }
}

}