# == Schema Information
#
# Table name: credit_cards
#
#  id         :integer          not null, primary key
#  user_id    :integer
#  name       :string(255)
#  number     :string(255)
#  uri        :string(255)
#  active     :boolean          default(FALSE)
#  created_at :datetime
#  updated_at :datetime
#  university_id :integer
#

class CreditCard < ActiveRecord::Base

  acts_as_tenant :university

  attr_accessor :expiry_date, :cvv, :token, :exp_month, :exp_year

  belongs_to :user

  validates :number, :name, :token, presence: true, if: :new_record?

  scope :active!, -> {where(active: true)}
  before_save :add_to_stripe
  before_destroy :remove_from_stripe
  after_save :setup_cards_state

  def add_to_stripe
    if self.new_record?
      begin
        strip_customer = user.stripe_customer
        card = strip_customer.sources.create(source: self.token)
        self.stripe_id = card.id
        self.brand = card.brand
      rescue => e
        logger.info e
        self.errors.add(:base, 'Invalid Card Details.')
        return false
      end
    end
  end

  def setup_cards_state
    if active?
      user.stripe_customer
      self.user.credit_cards.where.not(id: id).update_all(active: false)
    end
  end

  def stripe_card
    return @strip_card if @strip_card
    if stripe_id?
      @strip_card = user.stripe_customer.sources.retrieve(stripe_id)
    end
  end

  def remove_from_stripe
    #return false if active? or self.class.count == 1
     begin
      stripe_card.delete
      @strip_card = nil
     rescue => e
      logger.info e
      return false
     end
  end

end  
