require 'uri'

module Polymer
  module Rails
    class Component

      # Selectors for component resources
      SELECTORS = {
        html:       "link[rel='import']:not([type='css'])",
        stylesheet: "link[rel='stylesheet'], link[rel='import'][type='css']",
        javascript: "script[src]"
      }

      def initialize(data)
        @adapter = XmlAdapters::Base.factory
        @doc = @adapter.parse_document(data)
      end

      def stringify
        @adapter.stringify(@doc)
      end

      def replace_node(node, name, content)
        @adapter.replace_node node, @adapter.create_node(@doc, name, content)
      end

      def stylesheets
        @adapter.css_select(@doc, SELECTORS[:stylesheet]).reject{|tag| is_external? tag.attributes['href'].value}
      end

      def javascripts
        @adapter.css_select(@doc, SELECTORS[:javascript]).reject do |tag|
          is_external? tag.attributes['src'].value
        end
      end

      def html_imports
        @adapter.css_select(@doc, SELECTORS[:html])
      end

    private

      def is_external?(source)
        !URI(source).host.nil?
      end
    end
  end
end