# frozen_string_literal: true

# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
class Donation < ApplicationRecord
  # :date, # datetime (when this donation was made)
  # :amount, # int (in cents)
  # :recurring, # bool
  # :anonymous, # bool
  # :email, # str (cached email of the donor)
  # :designation, # text
  # :dedication, # text
  # :comment, # text
  # :origin_url, # text
  # :nonprofit_id, :nonprofit,
  # :card_id, :card, # Card with which any charges were made
  # :supporter_id, :supporter,
  # :profile_id, :profile,
  # :campaign_id, :campaign,
  # :payment_id, :payment,
  # :event_id, :event,
  # :direct_debit_detail_id, :direct_debit_detail,
  # :payment_provider

  validates :amount, presence: true, numericality: { only_integer: true }
  validates :supporter, presence: true
  validates :nonprofit, presence: true
  validates_associated :charges
  validates :payment_provider, inclusion: { in: %w[credit_card sepa] }, allow_blank: true

  has_many :charges
  has_many :campaign_gifts, dependent: :destroy
  has_many :campaign_gift_options, through: :campaign_gifts
  has_many :activities, as: :attachment, dependent: :destroy
  has_many :payments
  has_one :recurring_donation
  has_one :payment
  has_one :offsite_payment
  has_one :tracking
  belongs_to :supporter
  belongs_to :card
  belongs_to :direct_debit_detail
  belongs_to :profile
  belongs_to :nonprofit
  belongs_to :campaign
  belongs_to :event

  scope :anonymous, -> { where(anonymous: true) }
end