class Loa::UnidadeOrcamentariaPorUsuario < ApplicationRecord
		has_paper_trail

		attr_accessor :criado_por_pagina
		attr_default :criado_por_pagina, false

		belongs_to :usuario, class_name: 'Usuario'
		belongs_to :unidade_orcamentaria, class_name: 'Loa::UnidadeOrcamentaria'

		delegate :nome, to: :unidade_orcamentaria

		validates_uniqueness_of :unidade_orcamentaria_id, scope: :usuario_id, if: Proc.new{ self.persisted? }
    validate :deve_ser_do_mesmo_poder_do_usuario, on: :create, if: Proc.new{ self.usuario.tipo_de_poder.present? && self.usuario.tipo_de_poder != "ambos" }

		after_create :adicionar_unidades_anteriores, if: Proc.new{ self.criado_por_pagina == true }

    def deve_ser_do_mesmo_poder_do_usuario
      tipo_de_poder_da_unidade = self.unidade_orcamentaria.tipo_de_unidade_administrativa.poder_associado
      unless tipo_de_poder_da_unidade == self.usuario.tipo_de_poder
        errors.add(:unidade_orcamentaria_id, "Essa unidade é do poder #{tipo_de_poder_da_unidade}.")
      end
    end

		def adicionar_unidades_anteriores
			unidades = self.unidade_orcamentaria.unidades_orcamentarias_de_exercicios_anteriores_ids
			unidades.each do |unid|
				unidade = Loa::UnidadeOrcamentaria.find(unid)
				self.usuario.unidades_orcamentarias_por_usuario.find_or_create_by(unidade_orcamentaria_id: unid)
			end
		end
end
