<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Requests\Api\NewsItemIndex;
use App\Http\Resources\NewsItemListResource;
use App\Http\Resources\NewsItemResource;
use App\Libs\Services\NewsItemService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

class NewsItemController extends Controller
{
    protected NewsItemService $newsItemService;

    public function __construct(NewsItemService $newsItemService) {
        $this->newsItemService = $newsItemService;
    }

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

        $newsItems = $this->newsItemService->list($data);

        if ($newsItems) {
            return [
                'data' => NewsItemListResource::collection($newsItems['news']),
                'pagination' => $newsItems['pagination'],
            ];
        }
        return response()->json([], 404);
    }

    /**
     * Display the specified resource.
     *
     * @param BaseShow $request
     * @return JsonResource|JsonResponse
     */
    public function show(BaseShow $request)
    {
        $data = $request->validated();

        $newsItem = $this->newsItemService->findBySlug($data['slug']);

        if ($newsItem) {
            return new NewsItemResource($newsItem);
        }

        return response()->json(null, 404);
    }
}
