# products goes here
class Product < ApplicationRecord
  extend FriendlyId
  include FriendlyFinder
  friendly_id :name, use: :slugged
  has_and_belongs_to_many :categories
  has_many :images, as: :imageable, dependent: :destroy
  has_many :cart_products
  has_many :order_products

  validates :name, presence: true
  validates :price, presence: true, format: { with: /\A\d+(?:\.\d{0,2})?\z/ },
                    numericality: { greater_than: 0, less_than: 1_000_000 }
  validates :quantity, numericality: { only_integer: true }

  after_update :a_update

  def should_generate_new_friendly_id?
    slug.blank? || will_save_change_to_attribute?(:name)
  end

  def default_category
    Category.where(id: default_category_id).first
  end

  def cover_image
    images.where('cover = ?', true).first
  end

  def a_update
    return unless saved_change_to_attribute?(:slug)
    # preprocess images
    images.each do |image|
      # new file from old one
      image.change_filename(attribute_before_last_save(:slug), slug)
    end
  end

  def created_name
    Admin.find(updated_by).description
  end

  def created_date
    updated_at.to_date
  end

  def max_qty
    chk_quantity.eql?(true) ? quantity : 10
  end

  def categories_list
    categories.order(:name).pluck(:name).join(', ')
  end
end
