module ReaderAdminUI

 def self.included(base)
   base.class_eval do

      attr_accessor :reader, :message, :reader_configuration
      alias_method :readers, :reader
      alias_method :messages, :message

      def load_reader_extension_regions
        @reader = load_default_reader_regions
        @message = load_default_message_regions
        @reader_configuration = load_default_reader_configuration_regions
      end

      def load_default_regions_with_reader
        load_default_regions_without_reader
        load_reader_extension_regions
      end
      alias_method_chain :load_default_regions, :reader

    protected

      def load_default_reader_regions
        returning OpenStruct.new do |reader|
          reader.edit = Radiant::AdminUI::RegionSet.new do |edit|
            edit.main.concat %w{edit_header edit_form}
            edit.form.concat %w{edit_name edit_email edit_username edit_password edit_description edit_notes}
            edit.form_bottom.concat %w{edit_timestamp edit_buttons}
          end
          reader.index = Radiant::AdminUI::RegionSet.new do |index|
            index.thead.concat %w{title_header description_header modify_header}
            index.tbody.concat %w{title_cell description_cell modify_cell}
            index.bottom.concat %w{buttons}
          end
          reader.remove = reader.index
          reader.new = reader.edit
        end
      end

      def load_default_reader_configuration_regions
        returning OpenStruct.new do |reader_configuration|
          reader_configuration.show = Radiant::AdminUI::RegionSet.new do |show|
            show.settings.concat %w{administration}
            show.messages.concat %w{administration}
          end
          reader_configuration.edit = Radiant::AdminUI::RegionSet.new do |edit|
            edit.main.concat %w{edit_header edit_form}
            edit.form.concat %w{edit_registration edit_sender}
            edit.form_bottom.concat %w{edit_buttons}
          end
        end
      end

      def load_default_message_regions
        returning OpenStruct.new do |message|
          message.edit = Radiant::AdminUI::RegionSet.new do |edit|
            edit.main.concat %w{edit_header edit_form edit_footer}
            edit.form.concat %w{edit_subject edit_body}
            edit.form_bottom.concat %w{edit_timestamp edit_buttons}
          end
          message.index = Radiant::AdminUI::RegionSet.new do |index|
            index.thead.concat %w{subject_header sent_header modify_header}
            index.tbody.concat %w{subject_cell sent_cell modify_cell}
            index.bottom.concat %w{buttons}
          end
          message.show = Radiant::AdminUI::RegionSet.new do |show|
            show.header.concat %w{title}
            show.preview.concat %w{headers body buttons}
            show.delivery.concat %w{function options}
            show.footer.concat %w{notes}
          end
          message.new = message.edit
        end
      end
    end
  end
end