# frozen_string_literal: true

namespace :drip do

desc 'Imports order data into Drip'
task import_orders: :environment do
  puts 'Starting Drip Order Import...'

  require 'drip'

  drip_client = SolidusDrip::Base.new.client

  # Completed Orders
  order_activities = []
  Spree::Order.complete.find_each do |order|
    drip = SolidusDrip::ShopperActivity::Order.new(order)
    action = drip_status(order)
    order_activities << drip.send(:order_data, action) # order_data is a private method

    # 1000 is the limit on orders that can be sent at a time. Once we have
    # that amount of data we send it all to Drip
    if order_activities.count == 1000
      puts 'Sending 1000 orders to Drip...'
      # Send to drip
      drip_client.create_order_activity_events(order_activities)
      # Reset
      order_activities = []
    end
  end

  # Send any extra data that wasn't part of the loop
  if order_activities.count.positive?
    puts "Sending remaining #{order_activities.count} orders to Drip..."
    drip_client.create_order_activity_events(order_activities)
  end

  puts 'Drip Order Import Complete!'
end

end

## # Calculates the drip status to be sent for the given order # def drip_status(order)

if order.shipped?
  'fulfilled'
elsif order.paid?
  'paid'
else
  'updated'
end

end