<?php

namespace App\Http\Controllers\Frontend;

use App\Enums\JobOfferStatusEnum;
use App\Facades\JobOffersService;
use App\Http\Controllers\Controller;
use App\Http\Requests\JobOfferRequest;
use App\Http\Requests\JobOfferListRequest;
use App\Http\Resources\JobOffers\JobOfferListResource;
use App\Http\Resources\JobOffers\JobOfferResource;
use Illuminate\Contracts\Queue\Job;
use Illuminate\Support\Facades\Auth;

class JobOffersController extends Controller
{
    public function create(JobOfferRequest $request)
    {
        $data = $request->validated();
        $user = Auth::user();

        $jobOffer = JobOffersService::create($user, $data);

        return new JobOfferResource($jobOffer);
    }

    public function update(JobOfferRequest $request, $id)
    {
        $data = $request->validated();
        $user = Auth::user();

        $jobOffer = JobOffersService::update($user, $data, $id);

        return new JobOfferResource($jobOffer);
    }

    public function activate(int $jobOfferId)
    {
        $user = Auth::user();

        JobOffersService::setStatus($user, $jobOfferId, JobOfferStatusEnum::ACTIVE);

        return response()->json(['success' => true]);
    }

    public function deactivate(int $jobOfferId)
    {
        $user = Auth::user();

        JobOffersService::setStatus($user, $jobOfferId, JobOfferStatusEnum::INACTIVE);

        return response()->json(['success' => true]);
    }

    public function delete(int $jobOfferId)
    {
        $user = Auth::user();

        $jobOffer = JobOffersService::delete($user, $jobOfferId);

        return response()->json(['success' => $jobOffer != null]);
    }

    public function getAccountJobOffers(JobOfferListRequest $request)
    {
        $data = $request->validated();
        $user = Auth::user();

        $jobOffers = JobOffersService::getAccountJobOffers($user, $data);

        return JobOfferResource::collection($jobOffers);
    }

    public function getJobOffers(JobOfferListRequest $request)
    {
        $user = Auth::user();

        $data = $request->validated();

        $jobOffers = JobOffersService::getJobOffers($data, $user);

        return JobOfferListResource::collection($jobOffers);
    }

    public function getOwn(int $id)
    {
        $user = Auth::user();

        $jobOffer = JobOffersService::getAccountJobOffer($user, $id);

        return new JobOfferResource($jobOffer);
    }

    public function get(int $id)
    {
        $jobOffer = JobOffersService::getJobOffer($id);

        return new JobOfferResource($jobOffer);
    }
}
