<?php

namespace App\Modules\Company\Loan\Requests;

use App\Http\Resources\Company\LoanPendingRequest as LoanPendingRequestResource;
use App\Http\Resources\Company\LoanPendingRequestDetails as LoanPendingRequestDetailsResource;
use App\Models\LoanRequest;
use App\Traits\SortingTraits;
use App\Traits\UserTraits;
use Illuminate\Support\Facades\DB;


class PendingRequests
{
    use SortingTraits, UserTraits;

    public function getData($payload)
    {
        // sorting
        $sortField = $this->sortField($payload, 'date_requested'); // date_requested = default column to search
        $sortOrder = $this->sortOrder($payload, 'desc');

        $companyId = $this->getCurrentUser()->company_id;
        return LoanPendingRequestResource::collection(
            LoanRequest::select(
                'loan_requests.id',
                'loan_requests.created_at as date_requested',
                'loan_requests.note',
               
                )
                ->join('loan_pending_workers', 'loan_pending_workers.borrow_request_id', '=', 'loan_requests.id')
                ->where('loan_requests.loaner_company_id', $companyId)
                ->where('loan_pending_workers.status', 'Pending')
                ->groupBy('loan_requests.id')
                ->orderBy($sortField, $sortOrder)
                ->paginate(20)
        )->response()->setStatusCode(201);
    }

    public function getDetails($id)
    {
        $companyId = $this->getCurrentUser()->company_id;
        return LoanPendingRequestDetailsResource::collection(
            LoanRequest::select(
                'loan_requests.id',
                'loan_requests.created_at',
                'loan_requests.request_contact_id',
                'loan_pending_workers.date_from',
                'loan_pending_workers.date_to',
                'companies.contact_person_name as contact_person',
                'companies.contact_person_no as contact_number',
                DB::raw('CONCAT(companies.street_address, ", ", companies.city, ", ",  companies.state, ", ", companies.zipcode) as contact_address'),
                'loan_requests.note')
                ->join('companies', 'companies.id', '=', 'loan_requests.borrower_company_id')
                ->join('loan_pending_workers', 'loan_pending_workers.loan_request_id', '=', 'loan_requests.id')
                ->with('request_contact')
                ->where('loan_requests.loaner_company_id', $companyId)
                ->where('loan_pending_workers.loan_request_id', $id)
                ->limit(1)->get()
        )->response()->setStatusCode(201);
    }
}
