<?php

namespace {{controllerNamespace}};

use App\Http\Controllers\Controller;
use {{requestClass}};
use {{modelClass}};
use Illuminate\Http\Request;

class {{modelName}}Controller extends Controller
{
    public function index(Request $request)
    {
        $search = $request->get('search');

        $data = {{modelName}}::when($search, function ($q) use ($search) {
            $q->where(function ($sub) use ($search) {
                {{searchClauses}}
            });
        })
        ->orderBy('created_at', 'desc')
        ->paginate(10)
        ->withQueryString();

        return view('{{viewPath}}.index', compact('data', 'search'));
    }

    public function create()
    {
        return view('{{viewPath}}.create');
    }

    public function store({{modelName}}Request $request)
    {
        {{modelName}}::create([
            {{storeFields}}
        ]);

        flash()->success('{{modelName}} created successfully.');
        return redirect()->route('{{routePrefix}}.index');
    }

    public function edit($id)
    {
        $item = {{modelName}}::findOrFail($id);
        return view('{{viewPath}}.edit', compact('item'));
    }

    public function update({{modelName}}Request $request, $id)
    {
        $item = {{modelName}}::findOrFail($id);
        $item->update([
            {{storeFields}}
        ]);

        flash()->success('{{modelName}} updated successfully.');
        return redirect()->route('{{routePrefix}}.index');
    }

    public function destroy($id)
    {
        {{modelName}}::findOrFail($id)->delete();
        flash()->success('{{modelName}} deleted successfully.');
        return redirect()->route('{{routePrefix}}.index');
    }
}
