<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\ImplicitRule;
use Illuminate\Support\Facades\Http;

class ValidHCaptcha implements ImplicitRule
{
    public const H_CAPTCHA_VERIFY_URL = 'https://hcaptcha.com/siteverify';

    private $error = 'Invalid CAPTCHA. Please prove you\'re not a bot.';

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (empty($value)) {
            $this->error = 'Please complete the captcha.';

            return false;
        }

        return Http::asForm()->post(self::H_CAPTCHA_VERIFY_URL, [
            'secret' => config('services.h_captcha.secret_key'),
            'response' => $value,
        ])->json('success');
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $this->error;
    }
}