<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BaseShowId;
use App\Http\Requests\Api\MemberIndex;
use App\Http\Resources\CommitteeWithWorkGroupsListResource;
use App\Http\Resources\MemberListResource;
use App\Http\Resources\MemberResource;
use App\Libs\Services\MemberService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Auth;

class MemberController extends Controller
{
    protected MemberService $memberService;

    public function __construct(MemberService $memberService) {
        $this->memberService = $memberService;
    }

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

        if ($members) {
            return MemberListResource::collection($members);
        }

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

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

        $member = $this->memberService->findById($data['id']);

        if ($member) {
            return new MemberResource($member);
        }

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

    public function getMemberCommittees()
    {
        $userData = Auth::user();

        $member = $this->memberService->findByIdCommittees($userData->member->id);

        if ($member) {
            return CommitteeWithWorkGroupsListResource::collection($member->committees);
        }

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