module JmeterPerf
  module Plugins
    class CompositeGraph
      attr_accessor :doc
      include Helper
      def initialize(params = {})
        testname = params.is_a?(Array) ? "CompositeGraph" : (params[:name] || "CompositeGraph")
        graph_nodes = params.collect { |g| "<stringProp name=\"\">#{g[:graph]}</stringProp>" }
        metric_nodes = params.collect { |m| "<stringProp name=\"\">#{m[:metric]}</stringProp>" }

        composite_collections = Nokogiri::XML(<<-XML.strip_heredoc)
          <collectionProp name="COMPOSITE_CFG">
            <collectionProp name="">
                #{graph_nodes.join "\n"}
            </collectionProp>
            <collectionProp name="">
                #{metric_nodes.join "\n"}
            </collectionProp>
          </collectionProp>
        XML

        @doc = Nokogiri::XML(<<-XML.strip_heredoc)
        <kg.apc.jmeter.vizualizers.CompositeResultCollector guiclass="kg.apc.jmeter.vizualizers.CompositeGraphGui" testclass="kg.apc.jmeter.vizualizers.CompositeResultCollector" testname="#{testname}" enabled="true">
          <boolProp name="ResultCollector.error_logging">false</boolProp>
          <objProp>
            <name>saveConfig</name>
            <value class="SampleSaveConfiguration">
              <time>true</time>
              <latency>true</latency>
              <timestamp>true</timestamp>
              <success>true</success>
              <label>true</label>
              <code>true</code>
              <message>false</message>
              <threadName>true</threadName>
              <dataType>false</dataType>
              <encoding>false</encoding>
              <assertions>false</assertions>
              <subresults>false</subresults>
              <responseData>false</responseData>
              <samplerData>false</samplerData>
              <xml>false</xml>
              <fieldNames>false</fieldNames>
              <responseHeaders>false</responseHeaders>
              <requestHeaders>false</requestHeaders>
              <responseDataOnError>false</responseDataOnError>
              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
              <assertionsResultsToSave>0</assertionsResultsToSave>
              <bytes>true</bytes>
              <threadCounts>true</threadCounts>
              <sampleCount>true</sampleCount>
            </value>
          </objProp>
          <stringProp name="filename"></stringProp>
          <longProp name="interval_grouping">500</longProp>
          <boolProp name="graph_aggregated">false</boolProp>
          <stringProp name="include_sample_labels"></stringProp>
          <stringProp name="exclude_sample_labels"></stringProp>
          <stringProp name="start_offset"></stringProp>
          <stringProp name="end_offset"></stringProp>
          <boolProp name="include_checkbox_state">false</boolProp>
          <boolProp name="exclude_checkbox_state">false</boolProp>
          #{composite_collections.root}
        </kg.apc.jmeter.vizualizers.CompositeResultCollector>
        XML
        update params
      end
    end
  end
end