# frozen_string_literal: true

# API Controller for resources of type Price
# Prices are used in reservations (Machine, Space)
class API::PricesController < API::ApiController
  before_action :authenticate_user!

  def index
    authorize Price
    @prices = Price.all
    if params[:priceable_type]
      @prices = @prices.where(priceable_type: params[:priceable_type])

      @prices = @prices.where(priceable_id: params[:priceable_id]) if params[:priceable_id]
    end
    if params[:plan_id]
      plan_id = if /no|nil|null|undefined/i.match?(params[:plan_id])
                  nil
                else
                  params[:plan_id]
                end
      @prices = @prices.where(plan_id: plan_id)
    end
    @prices = @prices.where(group_id: params[:group_id]) if params[:group_id]
  end

  def update
    authorize Price
    @price = Price.find(params[:id])
    price_parameters = price_params
    price_parameters[:amount] = price_parameters[:amount] * 100
    if @price.update(price_parameters)
      render status: :ok
    else
      render status: :unprocessable_entity
    end
  end

  def compute
    cs = CartService.new(current_user)
    cart = cs.from_hash(params)
    @amount = cart.total
  end

  private

  def price_params
    params.require(:price).permit(:amount)
  end
end