<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\UrlRedirection;
use Illuminate\Http\Request;

class UrlRedirectionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
          
        abort_if(!userCan('urlRedirection.view'), 403);

        $query = UrlRedirection::query();

        // name filter
        if ($request->has('name') && $request->name != null) {
            $query->where('old_url', 'LIKE', "%$request->name%");
            $query->orWhere('new_url', 'LIKE', "%$request->name%");
        }


        $allUrlRedirection = UrlRedirection::all(['id', 'old_url', 'new_url', 'type', 'status']);

        $urlRedirections = $query->select('id', 'old_url', 'new_url', 'type', 'status')->paginate(10)->onEachSide(0);

        if ($request->perpage != 'all') {
            $urlRedirections = $urlRedirections->withQueryString();
        }

        return view('admin.urlRedirection.index', compact('urlRedirections', 'allUrlRedirection'));
    }

    public function create()
    {
        abort_if(!userCan('urlRedirection.create'), 403);
        return view('admin.urlRedirection.create');
    }
  
    public function store(Request $request)
    {
        abort_if(!userCan('urlRedirection.create'), 403);

        $request->validate([
            'old_url' => 'required',
            'new_url' => 'required',
            'type' => 'required',
        ]);

        UrlRedirection::create([
            'old_url' => $request->old_url,
            'new_url' => $request->new_url,
            'type' => $request->type,
            'status' => $request->status,
        ]);

        flashSuccess("Url Redirection Created Successfully!");
        return redirect()->route('urlRedirection.index');
    }

    public function show($id)
    {
        abort_if(!userCan('urlRedirection.view'), 403);
        $urlRedirection = UrlRedirection::find($id);
        $urlRedirections = $urlRedirection->paginate(10);
        return view('admin.urlRedirection.show', compact('urlRedirections'));
    }

    public function edit($id)
    {
        abort_if(!userCan('urlRedirection.update'), 403);

        $data['urlRedirections'] = UrlRedirection::where('id', $id)->first();
       
        return view('admin.urlRedirection.edit', $data);
    
    }
    
    public function update(Request $request, $id)
    {
        abort_if(!userCan('urlRedirection.update'), 403);

        $request->validate([
            'old_url' => 'required',
            'new_url' => 'required',
            'type' => 'required',
        ]);
   
        $urlRedirections = UrlRedirection::find($id);

     
        $urlRedirections->update([
            'old_url' => $request->old_url,
            'new_url' => $request->new_url,
            'type' => $request->type,
            'status' => $request->status,
        ]);

        flashSuccess("Url Redirection Updated Successfully!");
        return redirect()->route('urlRedirection.index');
    }


    public function destroy($id)
    {
        abort_if(!userCan('urlRedirection.delete'), 403);
        $urlRedirection = UrlRedirection::find($id);
        $urlRedirection->delete();

        flashSuccess("Url Redirection Deleted Successfully!");
        return back();
    }
   

    public function multipleDestroy(Request $request)
    {
        abort_if(!userCan('urlRedirection.delete'), 403);
        $urlRedirections = UrlRedirection::whereIn('id', $request->ids)->get();

        foreach ($urlRedirections as $urlRedirection) {
            $urlRedirection->delete();
        }

        flashSuccess("Url Redirection Deleted Successfully!");

        return true;
    }
}
