<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShow;
use App\Http\Requests\Api\CommitteeIndex;
use App\Http\Requests\Api\RequestEmails;
use App\Http\Resources\CommitteeListResource;
use App\Http\Resources\CommitteeResource;
use App\Http\Resources\CommitteeWithWorkGroupsListResource;
use App\Http\Resources\EmailResource;
use App\Libs\Services\CommitteeService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

class CommitteeController extends Controller
{
    protected CommitteeService $committeeService;

    public function __construct(CommitteeService $committeeService) {
        $this->committeeService = $committeeService;
    }

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

        $committees = $this->committeeService->list($data);

        if ($committees) {
            if ($data['workGroupsFlag']) {
                return response()->json(CommitteeWithWorkGroupsListResource::collection($committees), 200);
            } else {
                return response()->json(CommitteeListResource::collection($committees), 200);
            }
        }
        return response()->json([], 200);
    }

    /**
     * Display the specified resource.
     *
     * @param BaseShow $request
     * @return JsonResource|JsonResponse
     */
    public function show(BaseShow $request)
    {
        $data = $request->validated();

        $committee = $this->committeeService->findBySlug($data['slug']);

        if ($committee) {
            return new CommitteeResource($committee);
        }

        return response()->json(null, 404);
    }

    public function getEmails(RequestEmails $request)
    {
        $data = $request->validated();

        $emails = $this->committeeService->getEmails($data);

        return new EmailResource($emails);
    }
}
