# coding: utf-8

class CatalogueCategory < ActiveRecord::Base
  attr_accessible :description, :body, :title, :parent_id, :sort_order, :published
  attr_writer :readable_level

  before_save :default_values

  has_many :products, :dependent => :destroy

  acts_as_tree order: 'sort_order', name_column: :title, dependent: :destroy

  validates_length_of :description, :maximum => 1024

  validates_presence_of :title
  validates_length_of :title, :maximum => 255
  validates_presence_of :parent_id, :message => I18n.t('dts.messages.cant_create_second_catalogue_root')

  define_index do
    indexes title
    #indexes description
    #indexes body
    has published
    has sort_order, sortable: true
    #set_property field_weights: {
        #title: 3,
        #description: 2,
        #body: 1
    #}
    #TODO set_property delta: true # 'delta:boolean' column should present
  end

  sphinx_scope(:sphinx_default_scope) {
    {order: 'sort_order ASC', star: true}
  }

  default_sphinx_scope :sphinx_default_scope

  def readable_level
    if @readable_level.nil?
      @readable_level = level - 1
    end
    @readable_level
  end

  def self.readable_collection
    tree = CatalogueCategory.select([:id, :title, :parent_id]).hash_tree.shift[1]
    result = Array.new

    def self.flat_level(tree, level, result)
      tree.each_key do |node|
        node.readable_level = level
        result << node
        if not tree[node].nil?
          self.flat_level(tree[node], level+1, result)
        end
      end
    end

    self.flat_level(tree, 0, result)

    result
  end

  def self.readable_top_collection
    CatalogueCategory.root.children.select([:id, :title])
  end

  def self.readable_hash_tree
    CatalogueCategory.select([:id, :title, :parent_id]).hash_tree.shift[1]
  end

  private

  def default_values
    self.published ||= true
  end


end
