<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Requests\Api\DocumentIndex;
use App\Http\Resources\DocumentsResource;
use App\Http\Resources\DocumentResource;
use App\Libs\Services\DocumentService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

class DocumentController extends Controller
{
    protected DocumentService $documentService;

    public function __construct(DocumentService $documentService) {
        $this->documentService = $documentService;
    }

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

        $documents = $this->documentService->list($data);

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

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

        $document = $this->documentService->findBySlug($data['slug']);

        if ($document) {
            return new DocumentResource($document);
        }

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