<?php

namespace App\Modules\Company\Employees;

use App\Http\Resources\Company\WorkHistory as WorkHistoryResource;
use App\Models\LoanBorrowList;
use App\Traits\SearchTraits;
use App\Traits\SortingTraits;
use App\Traits\UserTraits;

class WorkerHistory
{
    use SortingTraits, SearchTraits, UserTraits;

    public function getData($payload, $id)
    {
        // sorting
        $sortField = $this->sortField($payload, 'date_from'); // first_name = default column to search
        if ($payload->sortField == 'company_name') {
            $sortField = 'borrowing_company.name';
        }
        $sortOrder = $this->sortOrder($payload);

        // search parameters
        $companyNameSearch = $this->searchField($payload->company_name);

        $status = 'Approved';
        return WorkHistoryResource::collection(
            LoanBorrowList::select(
                'IBR.id',
                'loan_borrow_lists.invoice_no',
                'loan_borrow_lists.date_from', 'loan_borrow_lists.date_to',
                'loan_borrow_lists.original_rate',
                'loan_borrow_lists.tax',
                'IBR.days', 'IBR.other_expense',
                'borrowing_company.name')
                ->join('inbound_billing_requests AS IBR', 'IBR.loan_borrow_lists_id', '=', 'loan_borrow_lists.id')
                ->join('companies AS borrowing_company', 'borrowing_company.id', '=', 'loan_borrow_lists.borrower_company_id')
                ->where('loan_borrow_lists.worker_id', $id)
                ->where('loan_borrow_lists.status', $status)
                ->when(!empty($companyNameSearch), function ($query) use ($companyNameSearch) {
                    return $query->where('borrowing_company.name', 'LIKE', $companyNameSearch . '%');
                })
                ->orderBy($sortField, $sortOrder)
                ->paginate(20)
        )->response()->setStatusCode(201);
    }

    public function getDetails($id)
    {
        return WorkHistoryResource::collection(
            LoanBorrowList::select(
                'IBR.id',
                'loan_borrow_lists.invoice_no',
                'loan_borrow_lists.date_from', 'loan_borrow_lists.date_to',
                'loan_borrow_lists.original_rate',
                'loan_borrow_lists.tax',
                'IBR.days', 'IBR.other_expense',
                'borrowing_company.name')
                ->join('inbound_billing_requests AS IBR', 'IBR.loan_borrow_lists_id', '=', 'loan_borrow_lists.id')
                ->join('companies AS borrowing_company', 'borrowing_company.id', '=', 'loan_borrow_lists.borrower_company_id')
                ->where('IBR.id', $id)
                ->limit(1)->get()
        )->response()->setStatusCode(201);
    }
}
