module PriceCalculation
  extend ActiveSupport::Concern

  # Gross price = net price + deposit + tax.
  # @return [Number] Gross price.
  def gross_price
    add_percent(price, tax) + deposit
  end

  def gross_price_without_deposit
    add_percent(price, tax)
  end

  def net_deposit_price
    remove_percent(deposit, tax)
  end

  # @return [Number] Price for the foodcoop-member.
  def fc_price
    add_percent(gross_price, FoodsoftConfig[:price_markup].to_i)
  end

  def fc_price_without_deposit
    add_percent(gross_price_without_deposit, FoodsoftConfig[:price_markup].to_i)
  end

  def fc_deposit_price
    add_percent(deposit, FoodsoftConfig[:price_markup].to_i)
  end

  private

  def remove_percent(value, percent)
    (value / ((percent * 0.01) + 1)).round(2)
  end

  def add_percent(value, percent)
    (value * ((percent * 0.01) + 1)).round(2)
  end
end