module ACH
  class Batch < Component
    has_many :entries
    
    def has_credit?
      entries.any?(&:credit?)
    end
    
    def has_debit?
      entries.any?(&:debit?)
    end
    
    def entry_count
      entries.length
    end
    
    def entry_hash
      entries.map{ |e| e.routing_number.to_i / 10 }.compact.inject(&:+)
    end
    
    def total_debit_amount
      entries.select(&:debit?).map{ |e| e.amount.to_i }.compact.inject(&:+) || 0
    end
    
    def total_credit_amount
      entries.select(&:credit?).map{ |e| e.amount.to_i }.compact.inject(&:+) || 0
    end
    
    def to_ach
      [header] + entries + [control]
    end
    
    def before_header
      attributes[:service_class_code] ||= (has_debit? && has_credit? ? 200 : has_debit? ? 225 : 220)
    end
  end
end