class Base::CategoriaDaPessoa < ApplicationRecord
    has_paper_trail
    belongs_to :categoria, class_name: 'Base::Categoria'
    belongs_to :sub_categoria, class_name: 'Base::Categoria'
    belongs_to :pessoa, class_name: 'Base::Pessoa'

    validates_presence_of :pessoa_id, :categoria_id
    validates_uniqueness_of :sub_categoria_id, scope: [:pessoa_id], allow_nil: true
    after_save :cria_todos_as_sub_categorias, if: Proc.new { self.categoria_id.present? && self.sub_categoria_id.nil? }

    def retorna_sub_categorias
        return self.categoria.present? ? self.categoria.filhos : Array.new
    end

    def utiliza_todas_categorias?
        self.categoria.present? && self.sub_categoria_id.nil?
    end

    def retorna_sub_categorias_especificas(ids)
        return Base::Categoria.where(id: ids).distinct
    end

    def cria_todos_as_sub_categorias
        self.categoria.filhos.each do |sub_categoria_filha|
            Base::CategoriaDaPessoa.find_or_create_by(pessoa_id: self.pessoa_id, categoria_id: self.categoria_id, sub_categoria_id: sub_categoria_filha.id)
        end

        self.destroy
    end
end
