# ReportingCloud Ruby Wrapper
#
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access 
# ReportingCloud in Ruby.
#
# Go to http://www.reporting.cloud to learn more about ReportingCloud
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the 
# canonical source repository.
#
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
#
# Copyright: © 2019 Text Control GmbH

require "txtextcontrol/reportingcloud/merge_settings"

module TXTextControl
  module ReportingCloud
  
    # Passes data to the {ReportingCloud.merge_document} method.
    # @attr merge_data [Array<Hash>] The merge data. Must be an array of hashes.
    # @attr template [String] Base64 encoded template document.
    #   Supported formats are RTF, DOC, DOCX and TX. 
    # @attr merge_settings [MergeSettings] Merge settings to specify 
    #   merge properties and document properties such as title and 
    #   author.
    # @author Thorsten Kummerow (@thomerow)
    class MergeBody
      attr_accessor :template
      attr_accessor :merge_settings
      
      # The constructor.
      # @param merge_data [Array<Hash>] The merge data. Must be an array of hashes.
      # @param template [String] Base64 encoded template document.
      #   Supported formats are RTF, DOC, DOCX and TX.
      # @param merge_settings [MergeSettings] Merge settings to specify 
      #   merge properties and document properties such as title and 
      #   author.
      def initialize(merge_data, merge_settings = nil, template = nil)
        self.merge_data = merge_data
        @template = template
        @merge_settings = merge_settings
      end      
      
      def merge_data=(val)
        unless val.kind_of?(Array) && !val.empty? && val[0].kind_of?(Hash)
          raise ArgumentError, "Merge data must be a non empty array of hashes."
        end        
        @merge_data = val
      end
      
      def merge_data
        @merge_data
      end
      
      # Converts a MergeBody instance to a hash while converting the attribute names
      # from snake case to camel case.
      # @return [Hash] A hash representing the MergeBody instance.
      def to_camelized_hash
        return {
          "mergeData" => @merge_data,
          "template" => @template,
          "mergeSettings" => @merge_settings.nil? ? nil : @merge_settings.to_camelized_hash
        }
      end
    end
  end 
end