<?php

namespace App\Traits;

use App\Models\AssignedWorkers;
use Illuminate\Http\Request;
trait ProjectWorkersTimesheetHelperTrait
{

    public $previous_set;
    public $new_set;
    public $project_id;

    public function identifyNewWorkers($data)
    {

        $new_synced = $data['new']['synced_workers'];
        $old_synced = $data['previous']['synced_workers'];

        $temp_set = $this->new_set['synced_workers'];

        foreach ($new_synced as $newkey => $new_worker) {

            foreach ($old_synced as $oldkey => $old_worker) {
                if ($new_worker['worker_id'] == $old_worker['worker_id']) {
                    unset($temp_set[$newkey]);
                }
            }
        }

        foreach ($temp_set as $worker) {
            $worker->project_address = json_decode($worker->project_address);
        }
        return [
            'added' => $temp_set,
            'removed' => [],
        ];

    }

    public function getWorkersOnProject()
    {
        $workers = AssignedWorkers::select(
            'assigned_workers.id as assigned_worker_id',
            'assigned_workers.worker_id',
            'assigned_availability.id as assigned_availability_id',
            'assigned_availability.worker_type',
            'assigned_availability.rate',
            'assigned_availability.start_date',
            'assigned_availability.end_date',
            'workers.first_name',
            'workers.last_name',
            'workers.email_address',
            'assigned_availability.is_draft',
            'projects.name as project_name',
            'projects.clock_in',
            'projects.clock_out',
            'projects.location as project_address'
        )
            ->join('projects', 'projects.id', '=', 'assigned_workers.project_id')
            ->join('assigned_availability', 'assigned_availability.assigned_worker_id', '=', 'assigned_workers.id')
            ->join('workers', 'workers.id', '=', 'assigned_workers.worker_id')
            ->whereNull('assigned_availability.deleted_at')
            ->where('assigned_workers.project_id', $this->project_id)

            ->get();

        return $this->segregateDraftAndLiveWorkers($workers);
    }
    public function segregateDraftAndLiveWorkers($workers)
    {

        $draft_workers = [];
        $live_workers = [];

        foreach ($workers as $worker) {
            if ($worker->is_draft) {
                array_push($draft_workers, $worker);
            } else {
                array_push($live_workers, $worker);
            }
        }

        return [
            'drafted_workers' => $draft_workers,
            'synced_workers' => $live_workers,
        ];

    }
    public function getUpdatedWorkers($workers_set)
    {

        $this->previous_set = $workers_set;
        $this->new_set = $this->getWorkersOnProject();

        return [
            "previous" => $this->previous_set,
            "new" => $this->new_set,
        ];
    }
    public function setProjectId($project_id)
    {
        $this->project_id = $project_id;
    }
}
