<?php

namespace App\Traits;

use App\Models\AssignedWorkers;
use App\Models\InboundBillingRequests;
use Carbon\Carbon;
use Illuminate\Http\Request;
trait TimeSheetTrait
{

    public function processWorker($worker, $hours, $project, $date)
    {

        if ($this->getWorkerType($worker, $project)[0]->worker_type != "inhouse") {
            return ['success' => true, $this->updateDaysHoursInput($worker, $hours, $project, $date)];
        } else {
            return ['success' => true, 'message' => "Inhouse worker"];
        }
    }
    public function updateDaysHoursInput($worker_id, $hours, $project, $date)
    {

        $daysRaw = InboundBillingRequests::select(
            'inbound_billing_requests.id',
            'inbound_billing_requests.days'

        )
            ->join('loan_borrow_lists', 'loan_borrow_lists.id', '=', 'inbound_billing_requests.loan_borrow_lists_id')
            ->where('loan_borrow_lists.worker_id', $worker_id)
            ->whereRaw("'" . $date . "' BETWEEN   inbound_billing_requests.initial_date and inbound_billing_requests.cutoff_date")
            ->get();

        $days = json_decode($daysRaw[0]->days);
        $day = '';
        for ($x = 0; $x <= count($days) - 1; $x++) {
            if (Carbon::parse($date)->isSameDay(Carbon::parse($days[$x]->date))) {
                /* return Carbon::parse($days[$x]->date); */
                $days[$x]->hours = $hours;
                $day = $days[$x]->date;
            }

        }
        $transaction = InboundBillingRequests::where('id', $daysRaw[0]->id)
            ->update(['days' => $days]);
        return $transaction ? ['success' => true, "date" => $day] : ['success' => false, "date" => $day];
    }

    public function getWorkerType($worker_id, $project_id)
    {

        $worker = AssignedWorkers::select(
            'assigned_workers.worker_id',
            'availabilities.worker_type'
        )
            ->join('assigned_availability', 'assigned_availability.assigned_worker_id', '=', 'assigned_workers.id')
            ->join('availabilities', 'availabilities.id', '=', 'assigned_availability.availability_id')
            ->where('assigned_workers.worker_id', $worker_id)
            ->where('assigned_workers.project_id', $project_id)
            ->get();

        return $worker;
    }
}
