<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Requests\Api\BlogArticlesIndex;
use App\Http\Resources\BlogArticleResource;
use App\Http\Resources\BlogArticlesCollection;
use App\Models\GenericBackoffice\BlogArticle;
use Illuminate\Http\JsonResponse;

class BlogController extends Controller
{
    /**
     * Display a list of blog articles.
     * @param  BlogArticlesIndex  $request
     * @return BlogArticlesCollection
     */
    public function index(BlogArticlesIndex $request)
    {
        $articles = BlogArticle::full()
            ->select('*')
            ->where('status', 'published')
            ->orderBy('position', 'asc')
            ->paginate(4);

        return new BlogArticlesCollection($articles);
    }

    /**
     * Display the requested open position.
     *
     * @param  BaseShow  $request
     * @return BlogArticleResource|JsonResponse
     */
    public function show(BaseShow $request)
    {
        $data = $request->validated();

        $query = BlogArticle::full()
            ->select('*')
            ->with([
                'blocks' => function ($query) {
                    $query->full()
                        ->select('*')
                        ->where('status', 'published')
                        ->orderBy('blog_article_block.position', 'asc');
                }
            ])
            ->where('status', 'published')
            ->where('lang_slug', $data['slug']);

        $article = $query->first();

        if ($article) {
            return new BlogArticleResource($article, true);
        }
        return response()->json([], 404);
    }
}
