module Rocx
  module Parts
    class Document < BasePart
      attr_reader :children

      def initialize
        @children = []
      end

      def <<(child)
        children << child
      end

      def read
        xml = build_xml do |xml|
          xml.document(root_namespaces) {
            xml.parent.namespace = xml.parent.namespace_definitions.find { |ns| ns.prefix == 'w' }
            xml['w'].body {
              children.each { |child| child.to_xml(xml) }
            }
          }
        end
        strip_whitespace(xml)
      end

    private

      def root_namespaces
        { "xmlns:wpc" => 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas',
          "xmlns:mo" => 'http://schemas.microsoft.com/office/mac/office/2008/main',
          "xmlns:mv" => 'urn:schemas-microsoft-com:mac:vml',
          "xmlns:o" => 'urn:schemas-microsoft-com:office:office',
          "xmlns:r" => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
          "xmlns:m" => 'http://schemas.openxmlformats.org/officeDocument/2006/math',
          "xmlns:v" => 'urn:schemas-microsoft-com:vml',
          "xmlns:wp14" => 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing',
          "xmlns:wp" => 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing',
          "xmlns:w10" => 'urn:schemas-microsoft-com:office:word',
          "xmlns:w14" => 'http://schemas.microsoft.com/office/word/2010/wordml',
          "xmlns:wpg" => 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup',
          "xmlns:wpi" => 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk',
          "xmlns:wne" => 'http://schemas.microsoft.com/office/word/2006/wordml',
          "xmlns:wps" => 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',
          "xmlns:w" => "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
          "xmlns:mc" => "http://schemas.openxmlformats.org/markup-compatibility/2006",
          "mc:Ignorable" => "w14 wp14" }
      end

    end
  end
end