<?php

namespace App\Modules\Admin\Libraries;

use App\Models\Expertise;
use App\Http\Resources\Admin\Expertises as ExpertisesResource;
use App\Traits\SearchTraits;
use App\Traits\SortingTraits;
use App\Traits\ValidatorTraits;

class WorkAreasExpertises
{
    use SortingTraits, SearchTraits, ValidatorTraits;

    public function getData($payload)
    {

        // sorting
        $sortField = $this->sortField($payload, 'name'); // name = default column to search
        $sortOrder = $this->sortOrder($payload);

        // searching
        $nameSearch = $this->searchField($payload->name);

        return ExpertisesResource::collection(
            Expertise::select(
                'expertises.id',
                'expertises.name')
                ->when(!empty($nameSearch), function ($query) use ($nameSearch) {
                    return $query->where(function ($query) use ($nameSearch) {
                        $query->where('expertises.name', 'LIKE', $nameSearch . '%');
                    });
                })
                ->orderBy($sortField, $sortOrder)
                ->paginate(20)
        )->response()->setStatusCode(201);
    }

    

    public function getWorkAreasOfExpertise() {
        
    }

    public function getDetails($id)
    {
        return ExpertisesResource::collection(
            Expertise::select(
                'expertises.id',
                'expertises.name')
                ->where('expertises.id', $id)
                ->limit(1)
                ->get()
        )->response()->setStatusCode(201);
    }

    public function storeData($payload)
    {
        // Expertise data
        $name = $payload->name;

        // Validate Query Params
        $rules = array(
            'name' => 'required|max:50',
        );
        $validate = $this->validateRequest($payload, $rules);
        if ($validate) {
            return $validate;
        }

        // preparing data to be saved on database
        $expertiseData = array(
            'name' => $name,
        );

        Expertise::create($expertiseData);
        return response()->json(['success' => 'Data added successfully.'])->setStatusCode(201);
    }

    public function updateData($payload, $id)
    {
        // Expertise data
        $name = $payload->name;

        // Validate Query Params
        $rules = array(
            'name' => 'required|max:50',
        );
        $validate = $this->validateRequest($payload, $rules);
        if ($validate) {
            return $validate;
        }

        // preparing data to be saved on database
        $expertiseData = array(
            'name' => $name,
        );
        Expertise::find($id)->update($expertiseData);
        return response()->json(['success' => 'Data updated successfully.'])->setStatusCode(201);
    }

    public function deleteData($id)
    {
        Expertise::where('id', $id)->delete();
        return response()->json(['success' => 'Data deleted successfully.'])->setStatusCode(201);
    }
}
