# frozen_string_literal: true

# API Controller for resources of type PrepaidPack
# PrepaidPacks are used to provide discounts to users that bought many hours at once
class API::PrepaidPacksController < API::ApiController
  before_action :authenticate_user!, except: :index
  before_action :set_pack, only: %i[show update destroy]

  def index
    @packs = PrepaidPackService.list(params).order(minutes: :asc)
  end

  def show; end

  def create
    authorize PrepaidPack
    @pack = PrepaidPack.new(pack_params)
    if @pack.save
      render status: :created
    else
      render json: @pack.errors.full_messages, status: :unprocessable_entity
    end
  end

  def update
    authorize @pack

    if @pack.update(pack_params)
      render status: :ok
    else
      render json: @pack.errors.full_messages, status: :unprocessable_entity
    end
  end

  def destroy
    authorize @pack
    @pack.destroy
    head :no_content
  end

  private

  def set_pack
    @pack = PrepaidPack.find(params[:id])
  end

  def pack_params
    pack_params = params
    pack_params[:pack][:amount] = pack_params[:pack][:amount].to_f * 100.0 if pack_params[:pack][:amount]
    params.require(:pack).permit(:priceable_id, :priceable_type, :group_id, :amount, :minutes, :validity_count, :validity_interval,
                                 :disabled)
  end
end