<?php

namespace App\Http\Controllers\Frontend;

use App\Facades\ProfilesService;
use App\Http\Controllers\Controller;
use App\Http\Requests\ProfileListRequest;
use App\Http\Resources\JobOffers\JobOfferResource;
use App\Http\Resources\Profiles\BasicUserResource;
use App\Http\Resources\Profiles\ProfilesResource;
use App\Http\Resources\Profiles\ProfileDetailResource;
use App\Http\Resources\Profiles\ProfileTeamDetailResourceCollection;
use App\Http\Resources\Projects\ProjectResource;
use Illuminate\Support\Facades\Auth;

class ProfilesController extends Controller
{
    public function index(ProfileListRequest $request)
    {
        $user = Auth::user();

        $data = $request->validated();

        $profiles = ProfilesService::getProfiles($data, $user);

        return ProfilesResource::collection($profiles);
    }

    public function show(int $id)
    {
        $profile = ProfilesService::getProfile($id);

        return new ProfileDetailResource($profile);
    }

    public function getjobOffer(int $id, int $jobOfferId)
    {
        $jobProfile = ProfilesService::getProfileJob($id, $jobOfferId);

        return new JobOfferResource($jobProfile);
    }

    public function getTeamMember(int $id, int $userId)
    {
        $teamMember = ProfilesService::getProfileTeamMember($id, $userId);
        $user = $teamMember->user;
        $userResultJuryMembers = ProfilesService::getUserJuryMembers($user);
        $userResultWinners = ProfilesService::getUserResultWinners($user);
        $userProjects = ProfilesService::getUserProjects($user);

        return new ProfileTeamDetailResourceCollection(
            $teamMember,
            $userResultJuryMembers,
            $userResultWinners,
            $userProjects
        );
    }

    public function getProject(int $id, int $projectId)
    {
        $project = ProfilesService::getProfileProject($id, $projectId);

        return new ProjectResource($project);
    }

    public function getBasicUser(int $userId)
    {
        $user = ProfilesService::getBasicUser($userId);

        return new BasicUserResource($user);
    }
}
