<?php

namespace {{ namespace }};

use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class {{ class }} extends Controller
{
    #read data function
    public function index(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'user_id' => 'required|exists:users,id',
        ]);

        if ($validator->fails()) {
            return $this->payloadMessage('error', $validator->errors(), 400);
        }

        $query = HistoryService::with('user', 'service')->where('user_id',$request->user_id)->get();
        return $this->payloadMessage('success', $query);
    }

    # create data function
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'user_id' => 'required|exists:users,id',
            'service_id' => 'required|exists:services,id',
            'jam' => 'required',
            'description' => 'nullable|string',
        ]);

        if ($validator->fails()) {
            return $this->payloadMessage('error', $validator->errors(), 400);
        }

        $query = HistoryService::create(
            array_merge($request->all())
        );

        return $this->payloadMessage('success', 'Success to create data');
    }

    # edit data function
    public function edit(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required|exists:history_services,id',
        ]);

        if ($validator->fails()) {
            return $this->payloadMessage('error', $validator->errors(), 400);
        }

        $query = HistoryService::with('user','service')->find($request->id);
        return $this->payloadMessage('success', $query);
    }

    # update data function
    public function update(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required|exists:history_services,id',
            'user_id' => 'required|exists:users,id',
            'service_id' => 'required|exists:services,id',
            'jam' => 'required',
            'description' => 'nullable|string',
        ]);

        if ($validator->fails()) {
            return $this->payloadMessage('error', $validator->errors(), 400);
        }

        $query = HistoryService::find($request->id);
        $query->update($request->all());

        return $this->payloadMessage('success', 'Success to update data');
    }

    # delete data function
    public function delete(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required|exists:history_services,id',
        ]);

        if ($validator->fails()) {
            return $this->payloadMessage('error', $validator->errors(), 400);
        }

        $query = HistoryService::find($request->id);
        $query->delete();

        return $this->payloadMessage('success', 'Success to delete data');
    }
}
