<?php
 
namespace App\Rules;

use App\Models\Asns;
use Illuminate\Contracts\Validation\Rule;
use Exception;

class AdminAnyAsnIdentity implements Rule
{

    private $approved_only = false;

    /**
     * Create a new rule instance.
     *
     * @param bool $_approved_only
     */
    public function __construct(bool $_approved_only = false)
    {
        $this->approved_only = $_approved_only;
    }

    /**
     * Static constructor for cleaner syntax
     *
     * @param bool $_approved_only
     * @return static
     */
    public static function make(bool $approved_only = false)
    {
        return new static($approved_only);
    }

    public function passes($attribute, $value)
    {

        if (!is_scalar($value)) {
            return false;
        }

        try {

            if($this->approved_only) {
                return Asns::where([['approved', '=', 1], ['id', '=', $value]])->count() === 1;
            }

            return Asns::find($value) !== null;
        }
        catch(Exception $ex) {
            return false;
        }

    }

    public function message()
    {
        return 'The :attribute must correlate to a valid, not deleted ASN.';
    }
}