<?php

namespace App\Http\Controllers;

use App\Http\Resources\DefaultResource;
use App\Models\Speciality;
use App\Http\Requests\SpecialityRequest;
use Illuminate\Http\Request;

class SpecialityController extends Controller
{
    public function index(Request $request)
    {
        $size = $request->input('page.size', 10);
        $page = $request->input('page.number', 1);
        $columns = [
            'id',
            'title',
            'icon_name',
            'high_complexity',
            'active',
            'updated_at',
        ];

        /** @var \Illuminate\Pagination\LengthAwarePaginator */
        $specialities = Speciality::query()
            ->orderBy('order_no', 'asc')
            ->filterLike($request->input('filter', []))
            ->applySorts($request->input('sort'))
            ->paginate(
                perPage: $size,
                columns: $columns,
                page: $page,
                pageName: 'page[number]',
            )
            ->appends(
                $request->only('sort', 'page.size', 'filter')
            );

        return $specialities;
    }

    public function store(SpecialityRequest $request)
    {
        $validated = $request->validated();
        $speciality = new Speciality;

        $speciality->fill($validated)->save();

        return $speciality;
    }

    public function show(Speciality $speciality)
    {
        return DefaultResource::make($speciality);
    }

    public function update(SpecialityRequest $request, Speciality $speciality)
    {
        $validated = $request->validated();

        $speciality->fill($validated)->save();

        return $speciality;
    }

    public function destroy(Speciality $speciality)
    {
        $speciality->delete();
    }
}
