<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\TopicIndex;
use App\Http\Resources\TopicResource;
use App\Models\GenericBackoffice\WebsiteObject;
use App\Models\Topic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

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

        if (!empty($data['topic'])) {
            $topicTree = WebsiteObject::select('tree_ids')
                ->where('object_id', $data['topic'])
                ->where('content_type', 'topics')
                ->first();

            $treeIds = $topicTree->tree_ids;
            $removeIds[] = intval($data['topic']);
            $filteredIds = array_diff($treeIds, $removeIds);

            $topics = Topic::full()
                ->where('status', 'published')
                ->whereIn('topic_id', $filteredIds)
                ->orderBy('title', 'asc')
                ->get();
        } else {
            $topics = Topic::full()
                ->where('status', 'published')
                ->orderBy('title', 'asc')
                ->get();
        }

        if ($topics) {
            return [
                'data' => TopicResource::collection($topics)
            ];
        }

        return response()->json([], 404);
    }
}
