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

        class CompanyarticlesController extends Controller
        {
            protected $modelService;
            public function __construct(Companyarticles $model)
            {
                $this->modelService = new CommonModelService($model);
                $options =['about','services','franchise','home'];

                View::share([
                    'options'=> $options,
                ]);
            }
           public function index(Request $request)
            {
                createActivityLog(CompanyarticlesController::class, 'index', ' Companyarticles index');
                $data = Companyarticles::where('status','<>',-1)->orderBy('display_order')->get();

                return view("crud.generated.companyarticles.index", compact('data'));
            }

            public function create(Request $request)
            {
                // $options =['about','services'];
                createActivityLog(CompanyarticlesController::class, 'create', ' Companyarticles create');
                $TableData = Companyarticles::where('status','<>',-1)->orderBy('display_order')->get();
                return view("crud.generated.companyarticles.create",compact('TableData'));
            }

            public function store(Request $request)
            {
                createActivityLog(CompanyarticlesController::class, 'store', ' Companyarticles 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_companyarticles')]);
                $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(CompanyarticlesController::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 Companyarticles Created Successfully.'], 200);
                }
                return redirect()->route('companyarticles.index')->with('success','The Companyarticles created Successfully.');
            }

            public function sort(Request $request)
            {
                $idOrder = $request->input('id_order');

                foreach ($idOrder as $index => $id) {
                    $companyArticle = Companyarticles::find($id);
                    $companyArticle->display_order = $index + 1;
                    $companyArticle->save();
                }

                return response()->json(['status' => true, 'content' => 'The Companyarticles sorted successfully.'], 200);
            }
            public function updatealias(Request $request)
            {

                $articleId = $request->input('articleId');
                $newAlias = $request->input('newAlias');
                $companyArticle = Companyarticles::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(CompanyarticlesController::class, 'show', ' Companyarticles show');
                $data = Companyarticles::findOrFail($id);

                return view("crud.generated.companyarticles.show", compact('data'));
            }


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


            public function update(Request $request, $id)
            {
                createActivityLog(CompanyarticlesController::class, 'update', ' Companyarticles 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('article_id'));
                } catch (Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(CompanyarticlesController::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 Companyarticles updated Successfully.'], 200);
                }
                // return redirect()->route('companyarticles.index')->with('success','The Companyarticles updated Successfully.');
                return redirect()->back()->with('success', 'The  Companyarticles  updated successfully.');
            }

            public function destroy(Request $request,$id)
            {
                createActivityLog(CompanyarticlesController::class, 'destroy', ' Companyarticles destroy');
                DB::beginTransaction();
                try {
                    $OperationNumber = getOperationNumber();
                    $this->modelService->destroy($OperationNumber, $OperationNumber, $id);
                } catch (Exception $e) {
                    DB::rollBack();
                    Log::info($e->getMessage());
                    createErrorLog(CompanyarticlesController::class, 'destroy', $e->getMessage());
                    return response()->json(['status' => false, 'message' => $e->getMessage()], 500);
                }
                DB::commit();
                return response()->json(['status'=>true,'message'=>'The Companyarticles Deleted Successfully.'],200);
            }



        }