module SilverPop
  class Client
    module User

      # ExportList - This interface exports contact data from a database, query, or contact list. Engage exports the results to a CSV file, then adds that file to the FTP account associated with the current session.
      #
      # @param list_id [String] Unique identifier for the database, query, or contact list Engage is exporting.
      # @param export_type [String] Specifies which contacts to export.
      # @param export_format [String] Specifies the format (file type) for the exported data.
      # @param options [Hash] Optional parameters to send
      # @param export_colums [Array] XML node used to request specific custom database columns to export for each contact.
      # @return [Mash] Mashify body from the API call
      # @example Export list 12345 for 1/1/2014 to 1/2/2014
      #   s = SilverPop.new({access_token: "abc123", url: "https://api1.silverpop.com"})
      #   s.export_list('12345', 'ALL', 'CSV", {DATE_START: "1/1/2014", DATE_END:"1/2/2014"})
      def export_list(list_id, export_type, export_format, options={}, export_columns=[])
        builder = Builder::XmlMarkup.new
        xml = builder.Envelope {
          builder.Body {
            builder.ExportList {
              builder.LIST_ID list_id
              builder.EXPORT_TYPE export_type
              builder.EXPORT_FORMAT export_format
              unless options.empty?
                options.each do |o|
                    builder.tag! o[0], o[1]
                end
              end
              unless export_columns.empty?
                builder.EXPORT_COLUMNS {
                  export_columns.each do |e|
                    builder.COLUMN e
                  end
                }
              end
              }
            }
          }
        post(xml)
      end

    end

    # ExportTable - This interface supports programmatically exporting Relational Table data from Engage into a CSV file, which Engage uploads to the FTP account or to the Stored Files directory associated with the session.
    #
    # @param table_id [String] Optional parameter to specify the ID of the Relational Table you are exporting. Either TABLE_NAME or TABLE_ID is required.
    # @param export_format [String] Specifies the format (file type) for the exported data, CSV, TAB, PIPE.
    # @param options [Hash] Optional parameters to send
    # @param export_colums [Array] XML node used to request specific custom database columns to export for each contact.
    # @return [Mash] Mashify body from the API call
    # @example Export Table 12345 for 1/1/2014 to 1/2/2014
    #   s = SilverPop.new({access_token: "abc123", url: "https://api1.silverpop.com"})
    #   s.export_table('12345', 'CSV', {DATE_START: "1/1/2014", DATE_END:"1/2/2014"})
    def export_table(table_id, export_format, options={})
      builder = Builder::XmlMarkup.new
      xml = builder.Envelope {
        builder.Body {
          builder.ExportTable {
            builder.TABLE_NAME table_id
            builder.EXPORT_FORMAT export_format
            unless options.empty?
              options.each do |o|
                builder.tag! o[0], o[1]
              end
            end
            }
          }
      }
      post(xml)
    end

  end
end