<?php
        namespace App\Http\Controllers;
        use App\Http\Controllers\Controller;
        use Illuminate\Http\Request;
        use App\Models\Requireddocuments;
        use Illuminate\Support\Facades\DB;
        use Illuminate\Support\Facades\Validator;
        use App\Service\CommonModelService;
        use Log;
        use Exception;

        class RequireddocumentsController extends Controller
        {
            protected $modelService;
            public function __construct(Requireddocuments $model)
            {
                $this->modelService = new CommonModelService($model);
            }
           public function index(Request $request)
            {
                createActivityLog(RequireddocumentsController::class, 'index', ' Requireddocuments index');
                $data = Requireddocuments::where('status','<>',-1)->orderBy('display_order')->get();
               
                return view("crud.generated.requireddocuments.index", compact('data'));
            }

            public function create(Request $request)
            {
                createActivityLog(RequireddocumentsController::class, 'create', ' Requireddocuments create');
                $TableData = Requireddocuments::where('status','<>',-1)->orderBy('display_order')->get();
                return view("crud.generated.requireddocuments.create",compact('TableData'));
            }

            public function store(Request $request)
            {
                createActivityLog(RequireddocumentsController::class, 'store', ' Requireddocuments store');
                $validator = Validator::make($request->all(), [
                    //ADD REQUIRED FIELDS FOR VALIDATION
                ]);

                if ($validator->fails()) {
                    return response()->json([
                        'error' => $validator->errors(),
                    ],500);
                }
                $request->request->add(['alias' => slugify($request->title)]);
                $request->request->add(['display_order' => getDisplayOrder('tbl_requireddocuments')]);
                $request->request->add(['created_at' => date("Y-m-d h:i:s")]);
                $request->request->add(['updated_at' => date("Y-m-d h:i:s")]);
                $requestData=$request->all();
                array_walk_recursive($requestData, function (&$value) {
                    $value = str_replace(env('APP_URL').'/', '', $value);
                });
                array_walk_recursive($requestData, function (&$value) {
                    $value = str_replace(env('APP_URL'), '', $value);
                });              
                DB::beginTransaction();
                try {
                    $operationNumber = getOperationNumber();
                    $this->modelService->create($operationNumber, $operationNumber, null, $requestData);
                } catch (\Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(RequireddocumentsController::class, 'store', $e->getMessage());
                    return response()->json(['status' => false, 'message' => $e->getMessage()], 500);
                }
                DB::commit();
                if ($request->ajax()) {
                    return response()->json(['status' => true, 'message' => 'The Requireddocuments Created Successfully.'], 200);
                }
                return redirect()->route('requireddocuments.index')->with('success','The Requireddocuments created Successfully.');
            }
          
            public function sort(Request $request)
            {
                $idOrder = $request->input('id_order');
                
                foreach ($idOrder as $index => $id) {
                    $companyArticle = Requireddocuments::find($id);
                    $companyArticle->display_order = $index + 1;
                    $companyArticle->save();
                }
            
                return response()->json(['status' => true, 'content' => 'The articles sorted successfully.'], 200);
            }
            public function updatealias(Request $request)
            {
                
                $articleId = $request->input('articleId');
                $newAlias = $request->input('newAlias');
                $companyArticle = Requireddocuments::find($articleId);
                if (!$companyArticle) {
                    return response()->json(['status' => false, 'content' => 'Company article not found.'], 404);
                }
                $companyArticle->alias = $newAlias;
                $companyArticle->save();
                return response()->json(['status' => true, 'content' => 'Alias updated successfully.'], 200);
            }
        
            
            

            public function show(Request $request, $id)
            {
                createActivityLog(RequireddocumentsController::class, 'show', ' Requireddocuments show');
                $data = Requireddocuments::findOrFail($id);
                
                return view("crud.generated.requireddocuments.show", compact('data'));
            }


            public function edit(Request $request, $id)
            {
                createActivityLog(RequireddocumentsController::class, 'edit', ' Requireddocuments edit');
                $TableData = Requireddocuments::where('status','<>',-1)->orderBy('display_order')->get();
                $data = Requireddocuments::findOrFail($id);
                if ($request->ajax()) {
                    $html = view("crud.generated.requireddocuments.ajax.edit", compact('data'))->render();
                    return response()->json(['status' => true, 'content' => $html], 200);
                }
                return view("crud.generated.requireddocuments.edit", compact('data','TableData'));
            }


            public function update(Request $request, $id)
            {
                createActivityLog(RequireddocumentsController::class, 'update', ' Requireddocuments update');
                $validator = Validator::make($request->all(), [
                   //ADD VALIDATION FOR REQIRED FIELDS
                ]);

                if ($validator->fails()) {
                    return response()->json([
                        'error' => $validator->errors(),
                    ],500);
                }
                $requestData=$request->all();
                array_walk_recursive($requestData, function (&$value) {
                    $value = str_replace(env('APP_URL').'/', '', $value);
                });
                array_walk_recursive($requestData, function (&$value) {
                    $value = str_replace(env('APP_URL'), '', $value);
                });
                DB::beginTransaction();
                try {
                    $OperationNumber = getOperationNumber();
                    $this->modelService->update($OperationNumber, $OperationNumber, null, $requestData, $request->input('requireddocument_id'));
                } catch (Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(RequireddocumentsController::class, 'update', $e->getMessage());
                    return response()->json(['status' => false, 'message' => $e->getMessage()], 500);
                }
                DB::commit();
                if ($request->ajax()) {
                    return response()->json(['status' => true, 'message' => 'The Requireddocuments updated Successfully.'], 200);
                }
                // return redirect()->route('requireddocuments.index')->with('success','The Requireddocuments updated Successfully.');
                return redirect()->back()->with('success', 'The  Requireddocuments  updated successfully.');
            }

            public function destroy(Request $request,$id)
            {
                createActivityLog(RequireddocumentsController::class, 'destroy', ' Requireddocuments destroy');
                DB::beginTransaction();
                try {
                    $OperationNumber = getOperationNumber();
                    $this->modelService->destroy($OperationNumber, $OperationNumber, $id);
                } catch (Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(RequireddocumentsController::class, 'destroy', $e->getMessage());
                    return response()->json(['status' => false, 'message' => $e->getMessage()], 500);
                }
                DB::commit();
                return response()->json(['status'=>true,'message'=>'The Requireddocuments Deleted Successfully.'],200);
            }
            public function toggle(Request $request,$id)
            {
                createActivityLog(RequireddocumentsController::class, 'destroy', ' Requireddocuments destroy');
                $data = Requireddocuments::findOrFail($id);
                $requestData=['status'=>($data->status==1)?0:1];
                DB::beginTransaction();
                try {
                    $OperationNumber = getOperationNumber();
                    $this->modelService->update($OperationNumber, $OperationNumber, null, $requestData, $id);
                } catch (Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(RequireddocumentsController::class, 'destroy', $e->getMessage());
                    return response()->json(['status' => false, 'message' => $e->getMessage()], 500);
                }
                DB::commit();
                return response()->json(['status'=>true,'message'=>'The Requireddocuments Deleted Successfully.'],200);
            }
         

            
        }