?PersonPhone, 'reason' => ?string] */ public function selectForPerson(Person $person): array { // Load active phones only (Person relation already filters active=1) $phones = $person->phones; if ($phones->isEmpty()) { return ['phone' => null, 'reason' => 'no_active_phones']; } // 1) validated mobile $phone = $phones->first(function (PersonPhone $p) { return ($p->validated === true) && ($p->phone_type === PersonPhoneType::Mobile); }); if ($phone) { return ['phone' => $phone, 'reason' => null]; } // 2) validated (any type) $phone = $phones->first(fn (PersonPhone $p) => $p->validated === true); if ($phone) { return ['phone' => $phone, 'reason' => null]; } // 3) mobile (any validation) $phone = $phones->first(fn (PersonPhone $p) => $p->phone_type === PersonPhoneType::Mobile); if ($phone) { return ['phone' => $phone, 'reason' => null]; } // 4) first active return ['phone' => $phones->first(), 'reason' => null]; } }