<?php

namespace App\Http\Controllers\Api;

use App\Http\Requests\Api\ProjectsIndex;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\ProjectsCollection;
use App\Models\GenericBackoffice\Project;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use Illuminate\Http\JsonResponse;

class ProjectController extends Controller
{
    /**
     * Display a list of projects.
     * @param  ProjectsIndex  $request
     * @return ProjectsCollection
     */
    public function index(ProjectsIndex $request)
    {
        $projects = Project::full()
            ->select('*')
            ->where('status', 'published')
            ->orderBy('position', 'asc')
            ->paginate(7);

        return new ProjectsCollection($projects);
    }

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

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

        $project = $query->first();

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