require 'spree/core/controller_helpers/respond_with_decorator'
require 'open_food_network/tag_rule_applicator'

class BaseController < ApplicationController
  include Spree::Core::ControllerHelpers
  include Spree::Core::ControllerHelpers::Auth
  include Spree::Core::ControllerHelpers::Common
  include Spree::Core::ControllerHelpers::Order
  include Spree::Core::ControllerHelpers::RespondWith

  include I18nHelper
  include EnterprisesHelper
  include OrderCyclesHelper

  helper 'spree/base'

  # Spree::Core::ControllerHelpers declares helper_method get_taxonomies, so we need to
  # include Spree::ProductsHelper so that method is available on the controller
  include Spree::ProductsHelper

  before_filter :set_locale
  before_filter :check_order_cycle_expiry

  private

  def set_order_cycles
    unless @distributor.ready_for_checkout?
      @order_cycles = OrderCycle.where('false')
      return
    end

    @order_cycles = OrderCycle.with_distributor(@distributor).active
      .order(@distributor.preferred_shopfront_order_cycle_order)

    applicator = OpenFoodNetwork::TagRuleApplicator.new(@distributor,
                                                        "FilterOrderCycles",
                                                        current_customer.andand.tag_list)
    applicator.filter!(@order_cycles)

    # And default to the only order cycle if there's only the one
    if @order_cycles.count == 1
      current_order(true).set_order_cycle! @order_cycles.first
    end
  end
end
