<?php

namespace App\Http\Controllers\Api;

use App\Http\Requests\Api\OpenPositionsIndex;
use App\Http\Resources\OpenPositionResource;
use App\Http\Resources\OpenPositionsCollection;
use App\Models\GenericBackoffice\OpenPosition;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;

class OpenPositionController extends Controller
{
    /**
     * Display a list of open positions.
     * @param  OpenPositionsIndex  $request
     * @return OpenPositionsCollection
     */
    public function index(OpenPositionsIndex $request)
    {
        $openPositions = OpenPosition::full()
            ->select('*')
            ->where('status', 'published')
            ->orderBy('position', 'asc')
            ->get();

        return new OpenPositionsCollection($openPositions);
    }

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

        $query = OpenPosition::full()
            ->select('*')
            ->with([
                'blocks' => function ($query) {
                    $query->full()
                        ->select('*')
                        ->orderBy('open_position_block.position', 'asc');
                },
                'OpenPositionPoDetails',
                'OpenPositionPoSpecs'
            ])
            ->where('lang_slug', $data['slug']);

        $openPosition = $query->first();

        return new OpenPositionResource($openPosition, true);
    }
}
