<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\DictionaryItemIndex;
use App\Http\Resources\DictionaryItemResource;
use App\Models\DictionaryItem;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

class DictionaryItemController extends Controller
{
    /**
     * Display the specified resource.
     *
     * @param DictionaryItemIndex $request
     * @return JsonResource|JsonResponse
     */
    public function index(DictionaryItemIndex $request)
    {
        $data = $request->validated();

        $query = DictionaryItem::full()
            ->select('dictionary_items.*', 'dictionary_item_languages.*')
            ->where('status', 'published');

        if (!empty($data['letter'])) {
            $query = $query->where(function ($query) use ($data) {
                $query->where('title', 'LIKE', $data['letter'] . '%')
                        ->orWhere('title', 'LIKE', strtoupper($data['letter']) . '%');
            });
        }

        switch ($data['orderBy']) {
            case 'latest':
                $query->orderBy('dictionary_items.created_at', 'desc');
                break;
            default:
                # alphabetical
                $query->orderBy('dictionary_item_languages.title', 'asc');
                break;
        }

        $dictionaryItems = $query->get();

        if ($dictionaryItems) {
            return DictionaryItemResource::collection($dictionaryItems);
        }
        return response()->json([], 404);
    }
}
