<?php

namespace App\Traits;

use App\Models\LoanApproved;
use App\Models\LoanRequest; 
use App\Models\BorrowApproved;
use App\Models\BorrowRequest;
use App\Models\CompanySubscriptions;
use App\Models\JobseekerApplicant;
use App\Models\WorkerRequest;

use Carbon\Carbon; 

trait CompanyCheckActiveTransactionsTrait 
{
    /**
     * CHECK IF HAS ACTIVE LOAN APPROVED REQUESTS 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveLoanApprovedRequest($companyId) : bool  
    {
        $currentDate = Carbon::now(); 

        $rows   =   LoanApproved::query()
                        ->where('loaner_company_id', '=', $companyId)
                        ->where('date_to', '>=', $currentDate)
                        ->count(); 

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS ACTIVE LOAN PENDING REQUESTS 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveLoanPendingRequest($companyId) : bool  
    {
        $rows   =   LoanRequest::query()
                        ->join('loan_pending_workers', 'loan_pending_workers.loan_request_id', '=', 'loan_requests.id')
                        ->where('loan_requests.loaner_company_id', '=', $companyId)
                        ->where('loan_pending_workers.status', '=', 'Pending')
                        ->count(); 

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS ACTIVE BORROW APPROVED REQUESTS 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveBorrowApprovedRequest($companyId) : bool  
    {
        $currentDate = Carbon::now(); 

        $rows   =   BorrowApproved::query()
                        ->where('borrower_company_id', '=', $companyId)
                        ->where('date_to', '>=', $currentDate)
                        ->count(); 

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS ACTIVE BORROW PENDING REQUESTS 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveBorrowPendingRequest($companyId) : bool  
    {
        $rows   =   BorrowRequest::query()
                        ->join('borrow_pending_workers', 'borrow_pending_workers.borrow_request_id', '=', 'borrow_requests.id')
                        ->where('borrow_requests.borrower_company_id', '=', $companyId)
                        ->where('borrow_pending_workers.status', '=', 'Pending')
                        ->count(); 

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS ACTIVE JOBSEEKER APPLICANT 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveJobSeekerApplicant($companyId) : bool  
    {
        $rows   =   JobseekerApplicant::query()
                        ->where('company_id', '=', $companyId)
                        ->where('status', '!=', 'Accepted')
                        ->count(); 

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS ACTIVE WORKER REQUESTS 
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasActiveWorkerRequest($companyId) : bool  
    {
        $rows   =   WorkerRequest::query()
                        ->where('company_id', '=', $companyId)
                        ->where('status', '=', 'active')
                        ->count();

        return $rows > 0; 
    }

    /**
     * CHECK IF HAS AMOUNT DUE  
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfHasAmountDue($companyId): bool
    {
        $companySubscription    =   CompanySubscriptions::query()
                                        ->where('company_id', '=', $companyId)
                                        ->first();
        
        if ($companySubscription->amount_due > 0)
        {
            return true; 
        }

        return false;         
    }

    /**
     * CHECK IF SUBSCRIPTION IS EXPIRED
     * 
     * @param int $companyId 
     * 
     * @return bool 
     */
    public function checkIfSubscriptionHasExpired($companyId): bool
    {
        $companySubscription    =   CompanySubscriptions::query()
                                        ->where('company_id', '=', $companyId)
                                        ->first();
        
        if ($companySubscription->mode_of_payment == 'yearly')
        {
            return $companySubscription->is_expired == 'true' ? true : false; 
        }

        return $companySubscription->is_monthly_expired == 'true' ? true : false; 
    }
}