<?php

namespace App\Traits;
use Illuminate\Http\Request;
use App\Models\Worker;
use Carbon\Carbon;

trait GenerateJobseekerWorkerID
{
    public function generateWorkerId($companyId)
    {
        $dateNow = date("mdy");
        $latestWorkerId = $this->getLatestWorkerId($companyId, $dateNow);
        $newWorkerId = $this->generateNewWorkerId($latestWorkerId, $companyId, $dateNow);
        return $newWorkerId;
    }

    public function getLatestWorkerId($companyId, $date_now)
    {
        $workerData = Worker::select('worker_id')
            ->where('worker_id', 'LIKE', '%'. sprintf("%04d", $companyId).'-'.$date_now .'%')
            ->orderBy('workers.worker_id', 'desc')
            ->limit(1)
            ->get();
        if ($workerData->count() < 1) {
            return sprintf("%04d", $companyId).'-'.$date_now.'-'.'0000';
        }
        else {
            return $workerData[0]->worker_id;
        }
    }

    public function generateNewWorkerId($latestWorkerId, $companyId, $date_now)
    {
        $latestWorkerIdArray = str_split($latestWorkerId, 12);
        $workerId = (int)$latestWorkerIdArray[1];
        $workerId++;
        return sprintf("%04d", $companyId).'-'.$date_now.'-'.sprintf("%04d", $workerId);
    }

    public function validateWorkerGeneratedId($companyId, $workerGeneratedId)
    {
        $employee_data = Worker::join('company_users', 'company_users.worker_id', '=', 'workers.id')
            ->where('company_users.company_id', $companyId)
            ->where('workers.worker_id', $workerGeneratedId)
            ->get();
        if($employee_data->isEmpty()) {
            return true;
        }
        else {
            return false;
        }
    }
    
}