# frozen_string_literal: true

# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module InsertSourceToken
  def self.create_record(tokenizable, params = {})
    ParamValidation.new({ tokenizable: tokenizable }.merge(params),
                        tokenizable: { required: true },
                        event: { is_a: Event },
                        expiration_time: { is_integer: true, min: 1 },
                        max_uses: { is_integer: true, min: 1 })
    if !params[:event].nil?
      max_uses = params[:max_uses] || Settings.source_tokens.event_donation_source.max_uses
      expiration_diff = params[:expiration_time] || Settings.source_tokens.event_donation_source.time_after_event
      expiration = params[:event].end_datetime + expiration_diff.to_i
    else
      max_uses = params[:max_uses] || Settings.source_tokens.max_uses
      expiration_diff = params[:expiration_time] || Settings.source_tokens.expiration_time
      expiration = Time.now + expiration_diff.to_i
    end
    c = SourceToken.new
    c.tokenizable = tokenizable
    c.expiration = expiration
    c.token = SecureRandom.uuid
    c.max_uses = max_uses
    c.event = params[:event]
    c.save!
    c
  end
end