<?php

namespace App\Listeners\Company;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Events\Company\DeleteAssignedAvailabilityEvent;
use App\Models\AssignedWorkers;
use App\Models\ProjectWorkersTimesheet;

class DeleteAssignedAvailabilityListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle(DeleteAssignedAvailabilityEvent $event)
    {
        $assignedWorkerId = $event->assignedWorkerId;

        $assigned_workers_data = AssignedWorkers::select(
            'assigned_workers.worker_id',
            'assigned_availability.start_date',
            'assigned_availability.end_date')
            ->join('assigned_availability', 'assigned_availability.assigned_worker_id', '=', 'assigned_workers.id')
            ->withTrashed()
            ->where('assigned_workers.id', $assignedWorkerId)
            ->first();
        $worker_id = $assigned_workers_data->worker_id;
        $start_date = $assigned_workers_data->start_date;
        $end_date = $assigned_workers_data->end_date;

        ProjectWorkersTimeSheet::where('project_workers_timesheet.worker_id', $worker_id)
            ->where(function ($query) use ($start_date, $end_date) {
                $query->where('date', $start_date)
                    ->orWhere('date', $end_date)
                    ->orWhereBetween('date', [$start_date, $end_date])
                    ->orWhereBetween('date', [$start_date, $end_date]);
            })
            ->delete();
    }
}
