'use strict';

var base = module.superModule;
var server = require('server');

server.extend(base);

// First, let's extend the ContactUs-Landing route
// to add recaptcha data to the template view
server.append('Landing', function(req, res, next) {
  res.setViewData({
    // Recaptcha API script URL
    recaptchaUrl: 'https://www.google.com/recaptcha/api.js',
    siteKey: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI' // Test Site Key from Google
  });

  next();
});

// Now we need to extend ContactUs-Subscribe, to add our logic
// that invokes the recaptcha service
// We prepend here to ensure that an invalid response is caught before the email is sent
server.prepend('Subscribe', function(req, res, next) {
  var recaptchaService = require('*/cartridge/scripts/services/recaptcha');
  // Token automatically added to request by recaptcha
  var token = req.form['g-recaptcha-response'];

  // Add required parameters for validation call
  var params = {
    // This is a test secret from Google
    // In practice, do not hardcode this.
    // It's better to store in a custom preference or service credential configuration
    secret: '6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe',
    response: token
  };

  // Calls recaptcha service
  // Returns a Service class instance
  // (start with a hardcoded fail)
  var validationResult = recaptchaService.call(params);

  // Actual response from Google
  var response = verificationResult.object;

  if (!response.success) {
    // Handle failure by returning error to the client
    res.json({
      success: false,
      msg: 'Recaptcha Validation Failure'
    });
  }

  next();
});

module.exports = server.exports();