<?php
namespace App\Modules\Mobile\Worker;
use Illuminate\Support\Facades\Auth;
use App\Models\LoanApproved;
use App\Models\Company as CompanyModel;
use App\Models\AssignedWorkers;
use App\Models\CompanyUser;

class Company {

    public function fetchCompanyDetails(){
        $workerID = Auth::user()->id;

        $isCurrentlyBorrowed = $this->isCurrentlyBorrowed($workerID);

        if($isCurrentlyBorrowed){
            $companyDetails = $this->getCompanyDetailsByCompanyID($isCurrentlyBorrowed->borrower_company_id);
            $status = 'Borrowed';
        }else{
            $companyDetails = $this->getCompanyDetailsByWorkerID($workerID);
        }       

        $isCurrentlyOnProject = $this->isCurrentlyOnProject($workerID);

        if($isCurrentlyOnProject){
            if($isCurrentlyOnProject->worker_type == 'inhouse'){
                $status = 'Assigned';
            }else if($isCurrentlyOnProject->worker_type == 'borrowed'){
                $status = 'Borrowed';
            }
        }else{
            if(!$isCurrentlyBorrowed){
                $status = 'Stand By';
            }
        }
        
        return [
            'isCurrentlyOnProject' => $isCurrentlyOnProject,
            'companyDetails' => $companyDetails,
            'status' => $status,
        ];
    }

    public function isCurrentlyBorrowed($workerID){
        return LoanApproved::where('worker_id', $workerID)
        ->whereRaw('loan_approved_histories.date_to >= CURDATE()')
        ->first();
    }

    public function getCompanyDetailsByWorkerID($workerID){
        return CompanyModel::select(
            'name',
        )
        ->join('company_users', 'company_users.company_id', 'companies.id')
        ->where('company_users.worker_id', $workerID)
        ->first();
    }

    public function isCurrentlyOnProject($workerID){
        return AssignedWorkers::select(
            'assigned_workers.worker_id',
            'assigned_workers.project_id',
            'projects.name',
            'projects.location',
            'assigned_availability.start_date',
            'assigned_availability.end_date',
            'assigned_availability.worker_type',
            'assigned_availability.is_draft'
        )
        ->join('projects', 'projects.id', 'assigned_workers.project_id')
        ->join('assigned_availability', 'assigned_availability.assigned_worker_id', 'assigned_workers.id')
        ->whereRaw('assigned_availability.end_date >= CURDATE()')
        ->where('worker_id', $workerID)
        ->where('is_draft', false)
        ->first();
    }

    public function getCompanyDetailsByCompanyID($companyID){
        return CompanyModel::select('name')->where('id', $companyID)->first();
    }
}