=begin
#Timeline

#This feature allows an app to create and configure custom events that can show up in the timelines of certain CRM objects like contacts, companies, tickets, or deals. You'll find multiple use cases for this API in the sections below.

The version of the OpenAPI document: v3

Generated by: https://openapi-generator.tech
OpenAPI Generator version: 6.2.1

=end

require 'cgi'

module Hubspot
  module Crm
    module Timeline
      class TemplatesApi
        attr_accessor :api_client

        def initialize(api_client = ApiClient.default)
          @api_client = api_client
        end
        # Deletes an event template for the app
        # This will delete the event template. All associated events will be removed from search results and the timeline UI.  This action can't be undone, so it's highly recommended that you stop using any associated events before deleting a template.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [nil]
        def archive(event_template_id, app_id, opts = {})
          archive_with_http_info(event_template_id, app_id, opts)
          nil
        end

        # Deletes an event template for the app
        # This will delete the event template. All associated events will be removed from search results and the timeline UI.  This action can&#39;t be undone, so it&#39;s highly recommended that you stop using any associated events before deleting a template.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
        def archive_with_http_info(event_template_id, app_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: TemplatesApi.archive ...'
          end
          # verify the required parameter 'event_template_id' is set
          if @api_client.config.client_side_validation && event_template_id.nil?
            fail ArgumentError, "Missing the required parameter 'event_template_id' when calling TemplatesApi.archive"
          end
          # verify the required parameter 'app_id' is set
          if @api_client.config.client_side_validation && app_id.nil?
            fail ArgumentError, "Missing the required parameter 'app_id' when calling TemplatesApi.archive"
          end
          # resource path
          local_var_path = '/integrators/timeline/v3/{appId}/event-templates/{eventTemplateId}'.sub('{' + 'eventTemplateId' + '}', CGI.escape(event_template_id.to_s)).sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))

          # query parameters
          query_params = opts[:query_params] || {}

          # header parameters
          header_params = opts[:header_params] || {}
          # HTTP header 'Accept' (if needed)
          header_params['Accept'] = @api_client.select_header_accept(['*/*'])

          # form parameters
          form_params = opts[:form_params] || {}

          # http body (model)
          post_body = opts[:debug_body]

          # return_type
          return_type = opts[:debug_return_type]

          # auth_names
          auth_names = opts[:debug_auth_names] || ['developer_hapikey']

          new_options = opts.merge(
            :operation => :"TemplatesApi.archive",
            :header_params => header_params,
            :query_params => query_params,
            :form_params => form_params,
            :body => post_body,
            :auth_names => auth_names,
            :return_type => return_type
          )

          data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
          if @api_client.config.debugging
            @api_client.config.logger.debug "API called: TemplatesApi#archive\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
          end
          return data, status_code, headers
        end

        # Create an event template for your app
        # Event templates define the general structure for a custom timeline event. This includes formatted copy for its heading and details, as well as any custom property definitions. The event could be something like viewing a video, registering for a webinar, or filling out a survey. A single app can define multiple event templates.  Event templates will be created for contacts by default, but they can be created for companies, tickets, and deals as well.  Each event template contains its own set of tokens and `Markdown` templates. These tokens can be associated with any CRM object properties via the `objectPropertyName` field to fully build out CRM objects.  You must create an event template before you can create events.
        # @param app_id [Integer] The ID of the target app.
        # @param timeline_event_template_create_request [TimelineEventTemplateCreateRequest] The new event template definition.
        # @param [Hash] opts the optional parameters
        # @return [TimelineEventTemplate]
        def create(app_id, timeline_event_template_create_request, opts = {})
          data, _status_code, _headers = create_with_http_info(app_id, timeline_event_template_create_request, opts)
          data
        end

        # Create an event template for your app
        # Event templates define the general structure for a custom timeline event. This includes formatted copy for its heading and details, as well as any custom property definitions. The event could be something like viewing a video, registering for a webinar, or filling out a survey. A single app can define multiple event templates.  Event templates will be created for contacts by default, but they can be created for companies, tickets, and deals as well.  Each event template contains its own set of tokens and &#x60;Markdown&#x60; templates. These tokens can be associated with any CRM object properties via the &#x60;objectPropertyName&#x60; field to fully build out CRM objects.  You must create an event template before you can create events.
        # @param app_id [Integer] The ID of the target app.
        # @param timeline_event_template_create_request [TimelineEventTemplateCreateRequest] The new event template definition.
        # @param [Hash] opts the optional parameters
        # @return [Array<(TimelineEventTemplate, Integer, Hash)>] TimelineEventTemplate data, response status code and response headers
        def create_with_http_info(app_id, timeline_event_template_create_request, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: TemplatesApi.create ...'
          end
          # verify the required parameter 'app_id' is set
          if @api_client.config.client_side_validation && app_id.nil?
            fail ArgumentError, "Missing the required parameter 'app_id' when calling TemplatesApi.create"
          end
          # verify the required parameter 'timeline_event_template_create_request' is set
          if @api_client.config.client_side_validation && timeline_event_template_create_request.nil?
            fail ArgumentError, "Missing the required parameter 'timeline_event_template_create_request' when calling TemplatesApi.create"
          end
          # resource path
          local_var_path = '/integrators/timeline/v3/{appId}/event-templates'.sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))

          # query parameters
          query_params = opts[:query_params] || {}

          # header parameters
          header_params = opts[:header_params] || {}
          # HTTP header 'Accept' (if needed)
          header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
          # HTTP header 'Content-Type'
          content_type = @api_client.select_header_content_type(['application/json'])
          if !content_type.nil?
              header_params['Content-Type'] = content_type
          end

          # form parameters
          form_params = opts[:form_params] || {}

          # http body (model)
          post_body = opts[:debug_body] || @api_client.object_to_http_body(timeline_event_template_create_request)

          # return_type
          return_type = opts[:debug_return_type] || 'TimelineEventTemplate'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['developer_hapikey']

          new_options = opts.merge(
            :operation => :"TemplatesApi.create",
            :header_params => header_params,
            :query_params => query_params,
            :form_params => form_params,
            :body => post_body,
            :auth_names => auth_names,
            :return_type => return_type
          )

          data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
          if @api_client.config.debugging
            @api_client.config.logger.debug "API called: TemplatesApi#create\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
          end
          return data, status_code, headers
        end

        # List all event templates for your app
        # Use this to list all event templates owned by your app.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [CollectionResponseTimelineEventTemplateNoPaging]
        def get_all(app_id, opts = {})
          data, _status_code, _headers = get_all_with_http_info(app_id, opts)
          data
        end

        # List all event templates for your app
        # Use this to list all event templates owned by your app.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [Array<(CollectionResponseTimelineEventTemplateNoPaging, Integer, Hash)>] CollectionResponseTimelineEventTemplateNoPaging data, response status code and response headers
        def get_all_with_http_info(app_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: TemplatesApi.get_all ...'
          end
          # verify the required parameter 'app_id' is set
          if @api_client.config.client_side_validation && app_id.nil?
            fail ArgumentError, "Missing the required parameter 'app_id' when calling TemplatesApi.get_all"
          end
          # resource path
          local_var_path = '/integrators/timeline/v3/{appId}/event-templates'.sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))

          # query parameters
          query_params = opts[:query_params] || {}

          # header parameters
          header_params = opts[:header_params] || {}
          # HTTP header 'Accept' (if needed)
          header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])

          # form parameters
          form_params = opts[:form_params] || {}

          # http body (model)
          post_body = opts[:debug_body]

          # return_type
          return_type = opts[:debug_return_type] || 'CollectionResponseTimelineEventTemplateNoPaging'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['developer_hapikey']

          new_options = opts.merge(
            :operation => :"TemplatesApi.get_all",
            :header_params => header_params,
            :query_params => query_params,
            :form_params => form_params,
            :body => post_body,
            :auth_names => auth_names,
            :return_type => return_type
          )

          data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
          if @api_client.config.debugging
            @api_client.config.logger.debug "API called: TemplatesApi#get_all\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
          end
          return data, status_code, headers
        end

        # Gets a specific event template for your app
        # View the current state of a specific template and its tokens.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [TimelineEventTemplate]
        def get_by_id(event_template_id, app_id, opts = {})
          data, _status_code, _headers = get_by_id_with_http_info(event_template_id, app_id, opts)
          data
        end

        # Gets a specific event template for your app
        # View the current state of a specific template and its tokens.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param [Hash] opts the optional parameters
        # @return [Array<(TimelineEventTemplate, Integer, Hash)>] TimelineEventTemplate data, response status code and response headers
        def get_by_id_with_http_info(event_template_id, app_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: TemplatesApi.get_by_id ...'
          end
          # verify the required parameter 'event_template_id' is set
          if @api_client.config.client_side_validation && event_template_id.nil?
            fail ArgumentError, "Missing the required parameter 'event_template_id' when calling TemplatesApi.get_by_id"
          end
          # verify the required parameter 'app_id' is set
          if @api_client.config.client_side_validation && app_id.nil?
            fail ArgumentError, "Missing the required parameter 'app_id' when calling TemplatesApi.get_by_id"
          end
          # resource path
          local_var_path = '/integrators/timeline/v3/{appId}/event-templates/{eventTemplateId}'.sub('{' + 'eventTemplateId' + '}', CGI.escape(event_template_id.to_s)).sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))

          # query parameters
          query_params = opts[:query_params] || {}

          # header parameters
          header_params = opts[:header_params] || {}
          # HTTP header 'Accept' (if needed)
          header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])

          # form parameters
          form_params = opts[:form_params] || {}

          # http body (model)
          post_body = opts[:debug_body]

          # return_type
          return_type = opts[:debug_return_type] || 'TimelineEventTemplate'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['developer_hapikey']

          new_options = opts.merge(
            :operation => :"TemplatesApi.get_by_id",
            :header_params => header_params,
            :query_params => query_params,
            :form_params => form_params,
            :body => post_body,
            :auth_names => auth_names,
            :return_type => return_type
          )

          data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
          if @api_client.config.debugging
            @api_client.config.logger.debug "API called: TemplatesApi#get_by_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
          end
          return data, status_code, headers
        end

        # Update an existing event template
        # Updates an existing template and its tokens. This is primarily used to update the headerTemplate/detailTemplate, and those changes will take effect for existing events.  You can also update or replace all the tokens in the template here instead of doing individual API calls on the `/tokens` endpoint.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param timeline_event_template_update_request [TimelineEventTemplateUpdateRequest] The updated event template definition.
        # @param [Hash] opts the optional parameters
        # @return [TimelineEventTemplate]
        def update(event_template_id, app_id, timeline_event_template_update_request, opts = {})
          data, _status_code, _headers = update_with_http_info(event_template_id, app_id, timeline_event_template_update_request, opts)
          data
        end

        # Update an existing event template
        # Updates an existing template and its tokens. This is primarily used to update the headerTemplate/detailTemplate, and those changes will take effect for existing events.  You can also update or replace all the tokens in the template here instead of doing individual API calls on the &#x60;/tokens&#x60; endpoint.
        # @param event_template_id [String] The event template ID.
        # @param app_id [Integer] The ID of the target app.
        # @param timeline_event_template_update_request [TimelineEventTemplateUpdateRequest] The updated event template definition.
        # @param [Hash] opts the optional parameters
        # @return [Array<(TimelineEventTemplate, Integer, Hash)>] TimelineEventTemplate data, response status code and response headers
        def update_with_http_info(event_template_id, app_id, timeline_event_template_update_request, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: TemplatesApi.update ...'
          end
          # verify the required parameter 'event_template_id' is set
          if @api_client.config.client_side_validation && event_template_id.nil?
            fail ArgumentError, "Missing the required parameter 'event_template_id' when calling TemplatesApi.update"
          end
          # verify the required parameter 'app_id' is set
          if @api_client.config.client_side_validation && app_id.nil?
            fail ArgumentError, "Missing the required parameter 'app_id' when calling TemplatesApi.update"
          end
          # verify the required parameter 'timeline_event_template_update_request' is set
          if @api_client.config.client_side_validation && timeline_event_template_update_request.nil?
            fail ArgumentError, "Missing the required parameter 'timeline_event_template_update_request' when calling TemplatesApi.update"
          end
          # resource path
          local_var_path = '/integrators/timeline/v3/{appId}/event-templates/{eventTemplateId}'.sub('{' + 'eventTemplateId' + '}', CGI.escape(event_template_id.to_s)).sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))

          # query parameters
          query_params = opts[:query_params] || {}

          # header parameters
          header_params = opts[:header_params] || {}
          # HTTP header 'Accept' (if needed)
          header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
          # HTTP header 'Content-Type'
          content_type = @api_client.select_header_content_type(['application/json'])
          if !content_type.nil?
              header_params['Content-Type'] = content_type
          end

          # form parameters
          form_params = opts[:form_params] || {}

          # http body (model)
          post_body = opts[:debug_body] || @api_client.object_to_http_body(timeline_event_template_update_request)

          # return_type
          return_type = opts[:debug_return_type] || 'TimelineEventTemplate'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['developer_hapikey']

          new_options = opts.merge(
            :operation => :"TemplatesApi.update",
            :header_params => header_params,
            :query_params => query_params,
            :form_params => form_params,
            :body => post_body,
            :auth_names => auth_names,
            :return_type => return_type
          )

          data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
          if @api_client.config.debugging
            @api_client.config.logger.debug "API called: TemplatesApi#update\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
          end
          return data, status_code, headers
        end
      end
    end
  end
end
