# frozen_string_literal: true

# track of all transactions payed using the given wallet
class WalletTransaction < ApplicationRecord
  include AmountConcern
  include NotificationAttachedObject

  belongs_to :invoicing_profile
  belongs_to :wallet
  belongs_to :reservation
  # what was paid with the wallet
  has_one :invoice, dependent: :nullify
  has_one :payment_schedule, dependent: :nullify
  # how the wallet was credited
  has_one :invoice_item, as: :object, dependent: :destroy

  validates :transaction_type, inclusion: { in: %w[credit debit] }
  validates :invoicing_profile, :wallet, presence: true

  delegate :user, to: :invoicing_profile

  def original_invoice
    invoice_item.invoice
  end
end
