<?php

namespace App\Modules\Admin\Subscriptions;

use App\Models\JobSeekerSubscriptionRates;
use App\Http\Resources\Admin\JobSeekerSubscriptionRate as JobSeekerSubscriptionRateResource;
use App\Http\Resources\Admin\JobSeekerSubscriptionRateDetails as JobSeekerSubscriptionRateDetailsResource;

class JobSeekerSubscriptionRateModule
{
    public function getData($payload)
    {
        //! Sorting
        $sortField = $payload['sortField'] ?? 'name';
        $sortOrder = $payload['sortOrder'] ?? 'asc';

        //! Searching
        $nameSearch   = $payload['name'] ?? null;
        $statusSearch = $payload['is_disabled'] ?? false;

        return JobSeekerSubscriptionRateResource::collection(
            JobSeekerSubscriptionRates::select(
                'job_seekers_subscription_rates.id',
                'job_seekers_subscription_rates.name',
                'job_seekers_subscription_rates.description',
                'job_seekers_subscription_rates.month',
                'job_seekers_subscription_rates.rate',
                'job_seekers_subscription_rates.is_disabled'
                )
                ->when(
                    !empty($nameSearch), 
                    function ($query) use ($nameSearch) 
                    {
                        return $query->where(
                            function ($query) use ($nameSearch) 
                            {
                                $query->where('job_seekers_subscription_rates.name', 'LIKE', $nameSearch . '%');
                            }
                        );
                    }
                )
                ->when(
                    !empty($statusSearch), 
                    function ($query) use ($statusSearch) 
                    {
                        return $query->where(
                            function ($query) use ($statusSearch) 
                            {
                                $query->whereIn('job_seekers_subscription_rates.is_disabled', $statusSearch);
                            }
                        );
                    }
                )
                ->orderBy($sortField, $sortOrder)
                ->paginate(20)
        )
        ->response()
        ->setStatusCode(200);
    }

    public function getDetails($id)
    {
        return JobSeekerSubscriptionRateDetailsResource::collection(
            JobSeekerSubscriptionRates::select(
                'job_seekers_subscription_rates.id',
                'job_seekers_subscription_rates.name',
                'job_seekers_subscription_rates.description',
                'job_seekers_subscription_rates.month',
                'job_seekers_subscription_rates.rate'
                )
                ->where('job_seekers_subscription_rates.id', $id)
                ->limit(1)
                ->get()
        )
        ->response()
        ->setStatusCode(200);
    }

    public function storeData($payload)
    {
        $subscriptionRateData = 
        [
            'name'        => $payload['name'],
            'description' => $payload['description'],
            'month'       => $payload['month'],
            'rate'        => $payload['rate'],
        ];

        JobSeekerSubscriptionRates::create($subscriptionRateData);

        return response()
            ->json(
                [
                    'success' => 'Data added successfully.'
                ]
            )
            ->setStatusCode(201);
    }

    public function updateData($payload, $id)
    {
        $subscriptionRateData =
        [
            'name'        => $payload['name'],
            'description' => $payload['description'],
            'month'       => $payload['month'],
            'rate'        => $payload['rate'],
        ];

        JobSeekerSubscriptionRates::whereId($id)->update($subscriptionRateData);

        return response()
            ->json(
                [
                    'success' => 'Data updated successfully.'
                ]
            )
            ->setStatusCode(200);
    }

    public function enableDisableData($payload, $id)
    {
        $isDisabled = $payload['is_disabled'];
        
        $subscriptionRateData = 
        [
            'is_disabled' => $isDisabled,
        ];

        JobSeekerSubscriptionRates::whereId($id)->update($subscriptionRateData);

        return response()
            ->json(
                [
                    'success' => 'Data updated successfully.'
                    ]
            )->setStatusCode(200);
    }
}
