# frozen_string_literal: true

class ThreeDSecureRepo
	class Failed < StandardError; end

	def put_from_result(result)
		three_d = if result.payment_method
			return unless result.payment_method.verification # Already vaulted

			result.payment_method.verification.three_d_secure_info
		else
			result.transaction.three_d_secure_info
		end

		if !three_d ||
		   (three_d.liability_shift_possible && !three_d.liability_shifted)
			raise Failed, method_token(result)
		end
	end

	def method_token(result)
		if result.payment_method
			result.payment_method.token
		else
			result.transaction.credit_card_details.token
		end
	end
end
