<?php

namespace App\Traits;

use App\Models\CompanySubscriptions;
use App\Models\CompanyUser;

trait CheckEmployeeCountAvailableTraits
{
    public function employeeCountValidation($company_id, $count)
    {
        $subscriptionData = $this->companySubscriptionMaximumEmployee($company_id);
        $max_employee = $subscriptionData['max_employee'];
        $is_unlimited = $subscriptionData['is_unlimited'];
        $companyEmployeesCount = $this->companyEmployeesCount($company_id);

        if ($is_unlimited == 0) {
            $remaining_count = $max_employee - $companyEmployeesCount;
            if ($count > $remaining_count) {
                return response()->json(['errors' => ['Unable to proceed, the number of invited employees is greater than the capacity of your current plan. Please upgrade to continue.']])->setStatusCode(201);
            }
        }
    }

    //Check subscription
    public function companySubscriptionMaximumEmployee($company_id)
    {
        return CompanySubscriptions::select(
            'company_subscription_rates.max_employee',
            'company_subscription_rates.is_unlimited',
        )
            ->join('company_subscription_rates', 'company_subscriptions.subscription_rate_id', '=', 'company_subscription_rates.id')
            ->where('company_subscriptions.company_id', $company_id)
            ->get()
            ->first();
    }

    public function companyEmployeesCount($company_id)
    {
        $companyWorkerData = CompanyUser::select()
            ->where('company_id', $company_id)
            ->where('role_id', 5)
            ->get();

        return $companyWorkerData->count();
    }

}
