# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module Nonprofits
class PayoutsController < ApplicationController
	include Controllers::NonprofitHelper

	before_filter :authenticate_nonprofit_admin!, only: :create
	before_filter :authenticate_nonprofit_user!, only: [:index, :show]

	def create
		payout = InsertPayout.with_stripe(current_nonprofit.id, {
      stripe_account_id: current_nonprofit.stripe_account_id,
      email: current_user.email,
      user_ip: current_user.current_sign_in_ip,
      bank_name: current_nonprofit.bank_account.name
    }, {before_date: params[:before_date]})

		if payout['failure_message'].present?
			flash[:notice] = "The payout failed: #{payout['failure_message']}"
			render json: payout, status: :unprocessable_entity
		else
			flash[:notice] = 'We successfully submitted your payout! View status and receipts below.'
			render json: payout, status: :ok
		end
	end

	def index
		@nonprofit = Nonprofit.find(params[:nonprofit_id])
		@payouts = @nonprofit.payouts.order('created_at DESC')
    balances = QueryPayments.nonprofit_balances(params[:nonprofit_id])
		@available_total = balances['available_gross']
    @pending_total = balances['pending_gross']
		@can_make_payouts = @nonprofit.can_make_payouts
	end

  # get /nonprofits/:nonprofit_id/payouts/:id
  def show
    payout = current_nonprofit.payouts.find(params[:id])
    respond_to do |format|
      format.json{render json: payout}
      format.csv do
        payments = QueryPayments.for_payout(params[:nonprofit_id], params[:id])
        filename = "payout-#{payout.created_at.strftime("%m-%d-%Y")}"
        send_data(Format::Csv.from_vectors(payments), filename: "#{filename}.csv")
      end
    end
  end

end
end