<?php

namespace App\Http\Controllers\Frontend;

use App\Exceptions\ApiHttpException;
use App\Facades\MagazineService;
use App\Http\Controllers\Controller;
use App\Http\Requests\MagazineListRequest;
use App\Http\Resources\Article\ArticleListResource;
use App\Http\Resources\Article\ArticleWithRelatedResource;
use App\Http\Resources\Event\EventCardResource;
use App\Http\Resources\Event\EventResource;
use App\Http\Resources\Magazine\MagazineCategoryResource;
class MagazineController extends Controller
{
    public function getCategories()
    {
        $categories = MagazineService::getCategories();

        return MagazineCategoryResource::collection($categories);
    }

    public function getCategory(string $slug)
    {
        $category = MagazineService::getCategoryBySlug($slug);

        if (!$category) {
            throw new ApiHttpException(404, 'item_not_found');
        }

        return new MagazineCategoryResource($category);
    }

    public function getArticles(MagazineListRequest $request)
    {
        $data = $request->validated();

        $articles = MagazineService::getArticles($data);

        return ArticleListResource::collection($articles);
    }

    public function getArticle(string $slug)
    {
        $article = MagazineService::getArticleBySlug($slug);

        if (!$article) {
            throw new ApiHttpException(404, 'item_not_found');
        }

        return new ArticleWithRelatedResource($article);
    }

    public function getEvents(MagazineListRequest $request)
    {
        $data = $request->validated();

        $articles = MagazineService::getEvents($data);

        return EventCardResource::collection($articles);
    }

    public function getEvent(string $slug)
    {
        $event = MagazineService::getEventBySlug($slug);

        if (!$event) {
            throw new ApiHttpException(404, 'item_not_found');
        }

        return new EventResource($event);
    }
}
