<?php

namespace App\Services\Recruitment;

use App\Models\Applicant;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;

class ApplicantScopeService
{
    public function __construct(
        protected RecruitmentNavService $nav
    ) {}

    public function canViewFullPipeline(?User $user): bool
    {
        return $user && $user->hasPermission('recruitment_view');
    }

    public function canViewOwnReferrals(?User $user): bool
    {
        return $user && (
            $user->hasPermission('recruitment_referrals_view')
            || $user->hasPermission('recruitment_refer')
        );
    }

    public function scopedQuery(?User $user): Builder
    {
        $query = Applicant::query();

        if (! $user) {
            return $query->whereRaw('1 = 0');
        }

        if ($this->canViewFullPipeline($user)) {
            return $query;
        }

        if ($this->canViewOwnReferrals($user)) {
            return $query->where('referred_by_user_id', $user->id);
        }

        return $query->whereRaw('1 = 0');
    }

    public function userCanView(?User $user, Applicant $applicant): bool
    {
        if ((int) $applicant->company_id !== (int) ($user?->company_id ?? 0)) {
            return false;
        }

        if ($this->canViewFullPipeline($user)) {
            return true;
        }

        return $this->canViewOwnReferrals($user)
            && (int) $applicant->referred_by_user_id === (int) $user->id;
    }
}
