<?php

namespace $NAMESPACE_API_CONTROLLER$;

use $NAMESPACE_API_REQUEST$\Create$MODEL_NAME$APIRequest;
use $NAMESPACE_API_REQUEST$\Update$MODEL_NAME$APIRequest;
use $NAMESPACE_MODEL$\$MODEL_NAME$;
use Illuminate\Http\Request;
use $NAMESPACE_APP$\Http\Controllers\AppBaseController;
use $NAMESPACE_API_RESOURCE$\$MODEL_NAME$Resource;
use Response;

$DOC_CONTROLLER$
class $MODEL_NAME$APIController extends AppBaseController
{
    $DOC_INDEX$
    public function index(Request $request)
    {
        $query = $MODEL_NAME$::query();

        if ($request->get('skip')) {
            $query->skip($request->get('skip'));
        }
        if ($request->get('limit')) {
            $query->limit($request->get('limit'));
        }

        $$MODEL_NAME_PLURAL_CAMEL$ = $query->get();

         return $this->sendResponse(
             $MODEL_NAME$Resource::collection($$MODEL_NAME_PLURAL_CAMEL$),
             __('messages.retrieved', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.plural')])
         );
    }

    $DOC_STORE$
    public function store(Create$MODEL_NAME$APIRequest $request)
    {
        $input = $request->all();

        /** @var $MODEL_NAME$ $$MODEL_NAME_CAMEL$ */
        $$MODEL_NAME_CAMEL$ = $MODEL_NAME$::create($input);

        return $this->sendResponse(
             new $MODEL_NAME$Resource($$MODEL_NAME_CAMEL$),
             __('messages.saved', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
        );
    }

    $DOC_SHOW$
    public function show($id)
    {
        /** @var $MODEL_NAME$ $$MODEL_NAME_CAMEL$ */
        $$MODEL_NAME_CAMEL$ = $MODEL_NAME$::find($id);

        if (empty($$MODEL_NAME_CAMEL$)) {
            return $this->sendError(
                __('messages.not_found', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
            );
        }

        return $this->sendResponse(
            new $MODEL_NAME$Resource($$MODEL_NAME_CAMEL$),
            __('messages.retrieved', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
        );
    }

    $DOC_UPDATE$
    public function update($id, Update$MODEL_NAME$APIRequest $request)
    {
        /** @var $MODEL_NAME$ $$MODEL_NAME_CAMEL$ */
        $$MODEL_NAME_CAMEL$ = $MODEL_NAME$::find($id);

        if (empty($$MODEL_NAME_CAMEL$)) {
           return $this->sendError(
               __('messages.not_found', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
           );
        }

        $$MODEL_NAME_CAMEL$->fill($request->all());
        $$MODEL_NAME_CAMEL$->save();

        return $this->sendResponse(
             new $MODEL_NAME$Resource($$MODEL_NAME_CAMEL$),
             __('messages.updated', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
        );
    }

    $DOC_DESTROY$
    public function destroy($id)
    {
        /** @var $MODEL_NAME$ $$MODEL_NAME_CAMEL$ */
        $$MODEL_NAME_CAMEL$ = $MODEL_NAME$::find($id);

        if (empty($$MODEL_NAME_CAMEL$)) {
           return $this->sendError(
                 __('messages.not_found', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
           );
        }

        $$MODEL_NAME_CAMEL$->delete();

         return $this->sendResponse(
             $id,
             __('messages.deleted', ['model' => __('models/$MODEL_NAME_PLURAL_CAMEL$.singular')])
         );
    }
}
