class Api::Admin::VariantSerializer < ActiveModel::Serializer
  attributes :id, :name, :producer_name, :image, :sku, :import_date,
             :options_text, :unit_value, :unit_description, :unit_to_display,
             :display_as, :display_name, :name_to_display,
             :price, :on_demand, :on_hand, :in_stock, :stock_location_id, :stock_location_name

  has_many :variant_overrides

  def name
    if object.full_name.present?
      "#{object.name} - #{object.full_name}"
    else
      object.name
    end
  end

  def on_hand
    return 0 if object.on_hand.nil?

    object.on_hand
  end

  def price
    # Decimals are passed to json as strings, we need to run parseFloat.toFixed(2) on the client.
    object.price.nil? ? 0.to_f : object.price
  end

  def producer_name
    object.product.supplier.name
  end

  def image
    return if object.product.images.empty?

    object.product.images.first.mini_url
  end

  def in_stock
    object.in_stock?
  end

  def stock_location_id
    return if object.stock_items.empty?

    object.stock_items.first.stock_location.id
  end

  def stock_location_name
    return if object.stock_items.empty?

    object.stock_items.first.stock_location.name
  end
end
