<?php

namespace App\Modules\Mobile\Supervisor;

use App\Models\ProjectSupervisors; 
use App\Traits\CreateMobileNotificationTraits;
use App\Traits\UserTraits;
use App\Http\Resources\Mobile\Supervisor\SupervisorProjectResource; 

use Carbon\Carbon;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; 

class SupervisorProjectModule
{
    //** TRAITS */
    use UserTraits;
    use CreateMobileNotificationTraits;

    /**
     * Fetch Items. 
     * 
     * @param array $data
     * 
     * @return SupervisorProjectResource
     */
    public function fetchItems(array $data) : mixed
    {
        $currentDate =  Carbon::parse($data['currentDate'])->toDateString();
        $workerId    =  Auth::user()->id; //supervisor id

        $items       =  ProjectSupervisors::query()
                            ->with(
                                [
                                    'project' => function ($query) use ($currentDate)
                                    {
                                        $query->where('date_end', '>=', $currentDate);
                                    },
                                    'project.company'
                                ]
                            )
                            ->withCount(
                            [
                                    'timesheets' => function($query) use ($workerId, $currentDate)
                                    {
                                        $query->where(
                                            [
                                                ['worker_id', '=', $workerId   ],
                                                ['date',      '=', $currentDate]
                                            ]
                                        );
                                    }, 
                                ]
                            )
                            ->where('user_id', '=', $workerId)
                            ->get();

        $filtered  =    $items->filter(
                    function ($value, $key)
                            {
                                return $value->timesheets_count == 0;        
                            }
                        );

        return SupervisorProjectResource::collection($filtered); 
    }
}
