# frozen_string_literal: true

require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
require 'planet_express'

RSpec::Core::RakeTask.new(:spec)

task default: :spec

task :process, [:input_file] do |_t, args|
  file = File.open(args.input_file, 'r')

  shipping_option_repository = PlanetExpress::ShippingOptionRepository.new
  shipment_repository = PlanetExpress::ShipmentRepository.new(data: [])
  discount_budget_for_month_repository = PlanetExpress::DiscountBudgetForMonthRepository.new

  shipment_reader = PlanetExpress::ShipmentReader.new(file, shipping_option_repository)
  shipment_formatter = PlanetExpress::ShipmentFormatter.new

  rules = [
    PlanetExpress::SShipmentDiscountRule.new(
      discount_budget_for_month_repository: discount_budget_for_month_repository,
      shipping_option_repository: shipping_option_repository,
      shipment_repository: shipment_repository
    ),
    PlanetExpress::LShipmentDiscountRule.new(
      discount_budget_for_month_repository: discount_budget_for_month_repository,
      shipping_option_repository: shipping_option_repository,
      shipment_repository: shipment_repository
    )
  ]

  PlanetExpress::ShipmentDiscountCalculator.new(
    shipment_repository: shipment_repository,
    rules: rules
  ).run(shipment_reader)

  shipment_repository.each do |shipment|
    puts shipment_formatter.format(shipment)
  end
end