class ModuleTag
  include Mongoid::Document
  include Mongoid::Timestamps

  field :is_default, type: Boolean, default: false
  field :name, localize: true

  has_one :tag, as: :tag_lease, autosave: true
  belongs_to :module_app

  belongs_to :parent, :class_name => 'ModuleTag', :inverse_of => :children
  has_many :children, :class_name => 'ModuleTag', :inverse_of => :parent, autosave: true, dependent: :destroy

  validates :name, :at_least_one => true

  before_save :init_update_tag
  before_destroy :destroy_tag

  after_save :update_children

  private

  def destroy_tag
    Tag.without_callback(:destroy, :before, :destroy_module_tag) do
      self.tag.destroy
    end
  end

  def init_update_tag
    if self.new_record?
      self.build_tag(name_translations: self.name_translations, is_default: self.is_default)
    else
      self.tag.attributes = {:name_translations => self.name_translations}
      self.tag.attributes = {:is_default => self.is_default}
    end
  end

  def update_children
    unless self.children.blank?
      self.children.each do |child|
        child.update_attributes(name_translations: self.name_translations)
      end
    end
  end

end
