// License: LGPL-3.0-or-later
// This defines a create_donation function that will create a Donation and
// Charge in our database and on Stripe given a Supporter that has a valid Card
//
// Use this with the cards/fields.html.erb partial
//
// Call it like: create_donation(card_obj, donation_obj)
// where card object is the full card data (name, number, expiry, etc) from the cards/fields partial
// and donation_obj is all the donation data (amount, type, etc)
//
// This function will create a Donation if donation.recurring is falsy
// It will create a RecurringDonation if donation.recurring is true

var create_card = require('../cards/create')
var format_err = require('../common/format_response_error')
var format = require('../common/format')
var request = require('../common/super-agent-promise')

module.exports = create_donation


function create_donation(donation) {
  if(donation.recurring_donation) {
    var path = '/nonprofits/' + app.nonprofit_id + '/recurring_donations'
  } else {
    var path = '/nonprofits/' + app.nonprofit_id + '/donations'
  }
  if(donation.dollars) {
    donation.amount = format.dollarsToCents(donation.dollars)
    delete donation.dollars
  }
	return request.post(path).send({donation: donation}).perform()
		// Reset the card form ui
		.then(function(resp) {
			appl.def('card_form', {status: '', error: false})
			return resp.body
		})
		// Display any errors
		.catch(function(resp) {
			appl.def('card_form', {
				loading: false,
				error: true,
				status: format_err(resp),
				progress_width: '0%'
			})
			throw new Error(resp)
		})
}