# frozen_string_literal: true

module Api
  module V1
    class InventoryColumnSerializer < ActiveModel::Serializer
      type :inventory_columns
      attributes :name, :data_type, :metadata
      has_many :repository_list_items,
               key: :inventory_list_items,
               serializer: InventoryListItemSerializer,
               class_name: 'RepositoryListItem',
               if: (lambda do
                 object.data_type == 'RepositoryListValue' &&
                   !instance_options[:hide_list_items]
               end)
      has_many :repository_checklist_items,
               key: :inventory_checklist_items,
               serializer: InventoryChecklistItemSerializer,
               class_name: 'RepositoryChecklistItem',
               if: (lambda do
                 object.data_type == 'RepositoryChecklistValue' &&
                  !instance_options[:hide_list_items]
               end)
      has_many :repository_status_items,
               key: :inventory_status_items,
               serializer: InventoryStatusItemSerializer,
               class_name: 'RepositoryStatusItem',
               if: (lambda do
                 object.data_type == 'RepositoryStatusValue' &&
                   !instance_options[:hide_list_items]
               end)
      has_many :repository_stock_unit_items,
               key: :inventory_stock_unit_items,
               serializer: InventoryStockUnitItemSerializer,
               class_name: 'RepositoryStockUnitItem',
               if: (lambda do
                 object.data_type == 'RepositoryStockValue' &&
                   !instance_options[:hide_list_items]
               end)

      include TimestampableModel

      def data_type
        Extends::API_REPOSITORY_DATA_TYPE_MAPPINGS[object.data_type]
      end
    end
  end
end