class WolfCore::Integrations::IterateOrdersService

def build_success_result

def build_success_result
  Result.success(
    data: {
      page: @page,
      per_page: @per_page,
      max_page: @max_page,
    }.merge(build_success_result_data)
  )
end

def build_success_result_data

def build_success_result_data
  {}
end

def get_page_orders

def get_page_orders
  3.times { log_object '===== Starting get_page_orders =====' }
  query = { per_page: @per_page, page: @page, client_id: 1 }
  log_object query, title: 'fetching orders query params are'
  response = fetch_orders!(
    wolf_token: @wolf_token, tenant: ENV['TENANT'], query: query,
    wolf_platform_url: ENV['WOLF_PLATFORM_URL'], error_message: 'Failed to fetch orders',
  )
  @total_pages = response.dig('total_pages')
  log_object "total_pages are #{@total_pages}"
  @page += 1
  3.times { log_object '===== Ending get_page_orders =====' }
  response.dig('orders')
end

def initialize(params: nil)

def initialize(params: nil)
  params ||= {}
  @page = params[:page] || 1
  @per_page = params[:per_page] || 100
  @max_page = params[:max_page]
end

def iterate_all_orders

def iterate_all_orders
  begin
    @orders = get_page_orders
    @orders.each do |order|
      log_object '===== Processing order ====='
      log_object order, title: 'order is'
      process_order(order)
    end
  end while page_is_less_or_equal_to_last
  @page -= 1
end

def page_is_less_or_equal_to_last

def page_is_less_or_equal_to_last
  3.times { log_object '===== Starting evaluating page_is_less_or_equal_to_last =====' }
  log_object "page is #{@page}"
  log_object "max_page is #{@max_page}"
  if @max_page.present?
    log_object "@page < @max_page is #{@page < @max_page}"
    return @page < @max_page
  end
  log_object "total_pages is #{@total_pages}"
  log_object "@page <= @total_pages is #{@page <= @total_pages}"
  3.times { log_object '===== Ending evaluating page_is_less_or_equal_to_last =====' }
  @page <= @total_pages
end

def process

def process
  @wolf_token = get_wolf_token
  iterate_all_orders
  build_success_result
end

def process_order(order)

def process_order(order)
  raise_service_error({ message: 'process_order must be implemented in a subclass' })
end