class Pdf::Accounting::FamilyBalanceService < Pdf::NewApplicationService
  def initialize(school, family)
    @family = family
    @school = school
  end

  private
    def header
      content = ActionController::Base.new.render_to_string(
        partial: 'pdf/headers/school_info.html.haml',
        locals: {
          school: @school,
          side_content_partial: 'pdf/accounting/family_balance_header',
          side_content: Date.today
        }
      )
      { content: content, spacing: 25 }
    end

    def body
      ActionController::Base.new.render_to_string(
        partial: 'pdf/accounting/family_balance.html.haml',
        locals: {
          family: @family,
          students: @family.decorate.student_names,
          categories: summary,
          totals: @totals
        }
      )
    end

    def subcategories
      @school.accounting_subcategories.ordered
    end

    def summary
      @totals = { unallocated: 0, outstanding: 0 }

      categories = subcategories.map do |subcategory|
        outstanding = @family.balance(:increase, subcategory.id)
        unallocated = @family.balance(:decrease, subcategory.id)

        @totals[:unallocated] += unallocated
        @totals[:outstanding] += outstanding
        {
          title: subcategory.decorate.title,
          outstanding: outstanding,
          unallocated: unallocated
        }
      end
      categories.reject { |c| c[:outstanding].zero? && c[:unallocated].zero? }
    end
end
