{% set siteKey = plugin('craft-recaptcha-3').settings.siteKey %}
{% if siteKey is empty %}
  The site key was not set for the Craft Recaptcha 3 plugin.
  <a href="/admin/settings/plugins/craft-recaptcha-3" target="_blank">Please visit the settings page to add this key.</a>
{% else %}
  {% set action = action|default('contact') %}

  <script src="https://www.google.com/recaptcha/api.js?render={{ siteKey }}"></script>
  <script>
    window.grecaptcha.ready(function () {
      requestCSRF();
    });

    var requestCSRF = function () {
      var csrfRequest = new XMLHttpRequest();
      csrfRequest.onload = function () {
        var response = JSON.parse(csrfRequest.responseText);
        if (csrfRequest.status == 200) {
          requestScore(response.csrfTokenValue);
        } else {
          console.log('There was a problem requesting the CSRF token from the server', response);
        }
      };
      csrfRequest.open("GET", "/index.php?p={{ craft.app.config.general.cpTrigger }}/{{ craft.app.config.general.actionTrigger }}/users/session-info&dontExtendSession=1", true);
      csrfRequest.setRequestHeader("Accept", "application/json");
      csrfRequest.send();
    };

    var requestScore = function (csrf) {
      window.grecaptcha.execute("{{ siteKey }}", {action: '{{ action }}'}).then(function (token) {
        var scoreRequest = new XMLHttpRequest();
        scoreRequest.onload = function () {
          if (scoreRequest.status == 200) {
            var response = JSON.parse(scoreRequest.responseText);
            if (window.recaptcha_callback) {
              window.recaptcha_callback(response);
            }
            if (response.success) {
              if (window.recaptcha_success) {
                window.recaptcha_success(response);
              }
            } else {
              if (window.recaptcha_failure) {
                window.recaptcha_failure(response);
              }
            }
          } else {
            console.log('There was a problem requesting the captcha score from the server', scoreRequest);
          }
        };
        scoreRequest.open("POST", "/{{ craft.app.config.general.actionTrigger }}/craft-recaptcha-3/default", true);
        scoreRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        scoreRequest.send('response=' + token + '&{{ craft.app.config.general.csrfTokenName }}=' + csrf);
      });
    };
  </script>
{% endif %}
