// License: LGPL-3.0-or-later
require('../../common/restful_resource')
require('../new')
var create_card = require('../../cards/create')
var create_donation = require('../../donations/create')
var request = require('../../common/super-agent-promise')
var get_ticket_levels = require('../../ticket_levels/get_totals')
var format_err = require('../../common/format_response_error')
var format = require('../../common/format')
var confirmation = require('../../common/confirmation')
appl.def('is_usa', format.geography.isUS)
require('../../common/restful_resource')
require('../../components/tables/filtering/apply_filter')('tickets')
require('./delete-ticket')

function metricsFetch() {
  appl.def('loading_metrics', true)
  request.get('/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/metrics')
    .perform()
    .then(function(resp) {
      appl
      .def('loading_metrics', false)
      .def('metrics', resp.body)
    })
  appl.def('loading_ticket_levels', true)
	get_ticket_levels(app.nonprofit_id, appl.event_id)
		.then(function(resp) {
      appl.def('loading_ticket_levels', false)
		})
}

function fetch(query) {
  query = query || {page: 1}
  query.page = query.page || 1
  appl.def('loading_tickets', true)
  return request.get('/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/tickets')
    .query(query)
    .perform()
    .then(function(resp) {
      appl.def('loading_tickets', false)
      if(query.page > 1) appl.concat('tickets.data', resp.body.data)
      else appl.def('tickets', resp.body)
    })
}


appl.ticket_wiz.on_complete = function(tickets) {
  fetch()
  metricsFetch()
}

appl.def('donations.path_prefix', '/')

appl.def('tickets.index', function() {
  appl.def('appl.tickets.query.page', appl.tickets.query.page || 1)
  return fetch(appl.tickets.query)
})

appl.def('ajax_donations', {
	create: function(form_obj, node) {
		appl.def('loading', true)
		appl.ajax.create('donations', form_obj, node)
		.then(appl.not_loading)
		.then(function(resp) {
      fetch()
			appl.close_modal()
			appl.notify("Charge successful")
			document.querySelector('.newDonationModal-form').reset()
		})
	}
})


appl.def('after_create_card', function(resp) {
  fetch()
	appl.notify("Card successfully saved!")
  location.reload()
})

appl.def('tickets', {
	path_prefix: '/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/',
	query: {page: 1},
	concat_data: true
})

appl.def('toggle_checkin', function(id, name, node) {
  var checked = appl.prev_elem(node).checked
  var message = name + (checked ? ' checked in.' : ' checked out.')
	appl.ajax.update('tickets', id, {checked_in: checked})
    .then(function(){
      appl.notify(message)
      metricsFetch()
    })
})

appl.def('update_ticket', function(id, name, update_text, form_obj) {
	appl.ajax.update('tickets', id, form_obj)
    .then(function(){
      appl.notify(name + "'s " + update_text + ' updated.')
    })
})

appl.def('show_new_donation', function(supporter_id, supporter_name, supporter_email, card_id, card_name) {
	appl.def('selected_supporter', {
    id: supporter_id,
    name: supporter_name,
    email: supporter_email
  })
	appl.def('selected_card', {
    id: card_id,
    name: card_name
  })
	appl.open_modal('newDonationModal')
})

appl.def('show_new_card', function(supporter_id, supporter_name, supporter_email, ticket_id, event_id) {
	appl.def('selected_supporter', {
    id: supporter_id,
    name: supporter_name,
    email: supporter_email
  })
	appl.def('selected_ticket', {
        id: ticket_id
  })
    appl.def('selected_event'), {
	    id: event_id
    }
	appl.open_modal('newCardModal')
})


// Create a new donation on behalf of a selected supporter and their card
appl.def('create_donation', function(el) {
	appl.def('error', '')
  appl.def('loading', true)
	create_donation(appl.new_donation)
		.then(function() {
      return fetch()
		})
		.then(appl.not_loading)
		.then(appl.close_modal)
		.then(function() {
			appl.prev_elem(el).reset()
			appl.notify('Donation successfully made! Receipts have been sent via email.')
      location.reload()
		})
		.catch(display_err('new_donation_form'))
})


// Create a new card on behalf of a selected supporter
appl.def('create_card', function(card_obj, el) {
	appl.def('new_card_form.error', '')
	appl.def('loading', true)
	create_card({type: 'Supporter', id: appl.selected_supporter.id, email: appl.selected_supporter.email}, card_obj, {event_id: appl.event_id})
		.then(function(card) {
			appl.prev_elem(el).reset()
			appl.notify("Card successfully saved for " + appl.selected_supporter.name)
			return appl.ajax.update('tickets', appl.selected_ticket.id, {token: card.token})
		})
		.then(function() {
      return fetch()
    })
		.then(appl.not_loading)
		.then(appl.close_modal)
    .then(() => location.reload())
		.catch(display_err('new_card_form'))
})

function display_err(scope) {
	return function(resp) {
    appl.def('loading', false)
    appl.def('error', format_err(resp))
	}
}

appl.def('remove_card', function(ticket_id, elm) {
  var result = confirmation('Are you sure?')
  result.confirmed = function() {
    appl.is_loading()

    request.post('/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/tickets/' + ticket_id + '/delete_card_for_ticket')
      .send({event_id: appl.event_id, ticket_id:ticket_id})
      .perform()
      .then(function(resp) {
        appl.not_loading()
        appl.notify('Successfully deleted card')
        appl.tickets.index()
      })
  }
})


fetch()
metricsFetch()