<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\BankRequest;
use App\Http\Resources\DefaultCollection;
use App\Http\Resources\DefaultResource;
use App\Models\Bank;

class BankController extends Controller
{
    public function index(): DefaultCollection
    {
        $size = request('page.size', 20);
        $page = request('page.number', 1);
        $sort = request('sort', null);

        $result = Bank::query()
            ->selectFillable()
            ->filterLike(request('filter', []))
            ->applySorts($sort, 'id')
            ->orderByRaw('ISNULL(order_no)')
            ->orderBy('order_no')
            ->orderByDesc('id')
            ->paginate($size, ['*'], 'page[number]', $page)
            ->appends(request()->only('sort', 'page.size', 'filter'));

        return DefaultCollection::make($result);
    }

    public function store(BankRequest $request): DefaultResource
    {
        $result = Bank::query()->create($request->validated());

        if ($request->hasFile('image')) {
            $result->image = $result->imageUpload($request->file('image'), $result);
        }

        return DefaultResource::make($result->fresh());
    }

    public function edit($id): DefaultResource
    {
        return DefaultResource::make(Bank::query()->findOrFail($id));
    }

    public function update(BankRequest $request, $id): DefaultResource
    {
        $result = Bank::query()->findOrFail($id);
        $result->fill($request->validated())->save();

        if ($request->hasFile('image')) {
            $result->image = $result->imageUpdate($request->file('image'), $result);
        }

        return DefaultResource::make($result->fresh());
    }

    public function destroy($id)
    {
        Bank::query()->findOrFail($id)->delete();

        return response()->noContent();
    }
}
