class Sequencer
  class Unit
    module Import
      module Exchange
        module FolderContacts
          class Total < Sequencer::Unit::Base
            include ::Sequencer::Unit::Exchange::Folders::Mixin::Folder
            include ::Sequencer::Unit::Import::Common::Model::Statistics::Mixin::Common

            uses :ews_folder_ids
            provides :statistics_diff

            def process
              state.provide(:statistics_diff, diff)
            end

            private

            def diff
              result = empty_diff.merge(
                folders: {},
              )

              folder_total_map.each do |display_path, total|

                result[:folders][display_path] = empty_diff.merge(
                  total: total
                )

                result[:total] += total
              end
              result
            end

            def folder_total_map
              ews_folder_ids.collect do |folder_id|
                folder       = ews_folder.find(folder_id)
                display_path = ews_folder.display_path(folder)

                [display_path, folder.total_count]
              end.to_h
            end
          end
        end
      end
    end
  end
end
